В 10:00 часов внушительная испанская эскадра разделилась на две группы и построилась в форме буквы "V". Одну сторону на севере образовали "Нумансия", "Ресолусион" и, прибывшая накануне сражения, "Альманса" со 137 орудиями. Вторая сторона из фрегатов "Вилья де Мадрид", "Беренгела" и "Рейна Бланка", со 122 орудиями двинулась на юг гавани. Канонерская лодка "Венседора" и транспортные суда были оставлены в тылу эскадры.[* С испанской стороны в битве участвовал Патрисио Монтехо - будущий командующий испанским флотом на Филиппинах во время испаноамериканской войны 1898 г.]
К 12:15 маневрирование эскадры было завершено, и флагманский броненосец начал обстрел. Форт Санта-Роза немедленно ответил. Началось сражение. Десять минут спустя перуанский снаряд пробил броню батареи "Нумансии" и разорвался. Из строя вышли пушки борта, и броненосцу пришлось разворачиваться другим для продолжения стрельбы. Но когда этот маневр был завершен, в корабль попало еще два снаряда, один из которых повредил броневую рубку и ранил Мендеса Нуньеса. Корабль вышел из боя на 15 минут, но затем вновь сблизился с берегом и подавил огонь одной из батарей с наиболее опасными для себя нарезными пушками Блэкли.
В башне Ла-Мерседе с двумя нарезными 300-фунтовыми армстронговскими орудиями, где располагался штаб военного министра Перу Гальвеса, произошел несчастный случай. Неосторожное обращение с боеприпасами привело к взрыву. Гальвес и еще 20 человек мгновенно погибли.
Обе стороны проявляли мужество и героизм. Фрегат "Вилья де Мадрид" был поражен разрывным 11 -дюймовым 450-фунтовым снарядом пушки Блэкли. Сразу погибло 27 человек, был перебит паропровод. Канонерка "Венседора" отбуксировала обездвиженный корабль из зоны поражения. На фрегате "Альманса" попадание в пороховой погреб убило 13 человек. Боезапас только чудом не детонировал. Поврежденный фрегат также вышел из боя. На фрегате "Беренгела" 300-фунтовый перуанский снаряд пробил борт по ватерлинии, и тонущее судно отошло.
Потеряв двух своих сотоварищей, "Альманса" присоединилась к южному отряду. Около 14:30 на фрегатах "Рейна Бланка" и "Ресолусион" истощился запас снарядов, и они отошли, оставив "Нумансию" и "Апьмансу" одних перед батареями. На "Рейна Бланка" дважды происходил пожар в районе крюйт-камеры. В 16:30 последние два корабля прекратили огонь и отошли, но перуанцы стреляли по ним до тех пор, пока те находились на расстоянии выстрела.
Фрегат "Альманса"
Фрегат "Рейна Бланка"
Испанская эскадра после боя на острове Сан-Лоренсо
Около 17:00. перестрелка закончилась. Перуанские пушки поразили противника 185 раз. Сильно поврежденные испанские корабли так и не смогли заставить замолчать береговые батареи. Эскадра Мендеса Нуньеса была вынуждена отойти к острову Сан Лоренсо. Было зафиксировано следующее количество попаданий: "Рейна Бланка" - 30, "Ресолусион" - 30, "Нумансия" - 51 , "Альманса" - 72, "Беренгела" и "Венседора" - по 2. Погибло 50 испанских моряков, 83 было тяжело и 68 легко ранено. Сам Мендес Нуньес получил ранение в бою. Два фрегата пришлось отбуксировать на мель острова Сан-Лоренсо для спасения от затопления. Перуанцы потеряли около 200 человек, однако город и порт пострадали мало. Перуанские корабли были поражены испанцами 13 раз и потеряли 2 человека убитыми и 3 ранеными.
Перуанские броненосные корабли действовали как плавучие батареи на якоре. Пушки испанцев поразили "Лоа" десять раз, но броня выдержала попадания, и корабль не пострадал. Единственным пострадавшим членом экипажа броненосцев стал раненый лейтенант Мануэль Арриага, когда 200-мм цельное ядро попало в монитор "Виктория". Броня выдержала удар, однако внутри башни оторвалась несколько головок болтов, на которых крепились броневые плиты, и они поразили перуанского офицера.
Испанцы заявили о победе, однако так как цели операции достигнуты не были, то итоги сражения можно оценить как стратегическую победу перуанцев. Испанская эскадра была более не способна проводить какие-либо операции, в то время как флот союзников полностью сохранил боеспособность.
Тем временем, в Атлантическом океане испанцы столкнулись с новой угрозой: там появился перуанский броненосец "Уаскар".[* Характерно, что Магелланов пролив "Уаскар" проходил с американским корветом.] 5 мая у берегов Уругвая он захватил два испанских вспомогательных корабля. Продолжение набегов на южноамериканские порты могло привести только к дальнейшей порче или даже потере кораблей. Испанскую эскадру требовалось ремонтировать, боеприпасы, уголь и продовольствие были на исходе. В итоге, командование приняло решение об освобождении островов Чинча и отходе.
10 мая испанская эскадра разделилась на две группы. Четыре фрегата и "Нумансия" двинулись на Филиппины, остальные корабли направились на юг и рассредоточились в нейтральных портах Бразилии и Уругвая. Последним успехом испанской эскадры можно было назвать прорыв нескольких кораблей вокруг мыса Горн
Повреждения испанских кораблей в битве при Кальяо
Монитор "Уаскар", сохраняющийся в настоящее время как корабль-музей
Капитан Джон Рандольф Такер
Фрегат "Вилья де Мадрид" в 1870-е гг.
План экспедиции союзников на Филиппин
Тем временем силы союзников пополнились двумя прибывшими из Англии перуанскими броненосцами. Длительный переход из Европы подтвердил мореходные качества кораблей. Даже 10-балльный шторм в Магеллановом проливе не доставил им особых хлопот. Усиленная эскадра под командованием адмирала Энкалады собралась в Вальпараисо.
После устранения непосредственной угрозы со стороны Испании старые межгосударственные разногласия между Чили и Перу вновь дали о себе знать. Перуанцы считали, что их новые броненосцы серьезно изменяют баланс сил, и пришло время отомстить за унижения и ущерб, совершив набег на испанские колонии. Чилийцы предлагали воспользоваться ситуацией и добить испанские силы в Южной Америке. Кроме того, чилийцы предполагали, что Испания отправит в регион новую усиленную броненосцами эскадру. В каждом из планов фактор неожиданности мог сыграть важную роль.
Пока обсуждались эти планы, президент Прадо предложил поставить во главе морских сил союзников нового командующего. Таким человеком, по мнению перуанского лидера, мог стать офицер с боевым опытом. Посол Перу в США заключил договор о приеме на службу с Джоном Рандольфом Такером. Такер был профессиональным военным моряком, в годы Гражданской войны стал известен, как один из лучших морских офицеров флота Конфедерации. Поражение южан поставило Такера в трудное положение, так как вернуться на службу во флот США он уже не мог. Американец получал звание контр-адмирала флота Перу и годовое жалование в 5000 долларов.