1592년(선조 25) 4월 일본군은 수륙병진계획으로 조선을 침범하였다. 그러나 그들 수군이 남해 · 서해로 침범하던 중 옥포(玉浦) · 당포(唐浦) · 당항포(唐項浦) · 율포(栗浦) 등지에서 연전연패하였다. 그러자 수군의 유능한 장수였던 와키자카[脇坂安治]는 정예 병력을 늘려 73척을 이끌고 거제도 등지를 침범하였다. 수군장수였던 구키[九鬼嘉隆]도 42척을 거느리고 뒤를 따랐다.
일본 수군들의 동향을 탐지한 이순신은 7월 5일 이억기와 함께 전라좌우도의 전선 48척을 본영(여수) 앞바다에 집결시켜 합동훈련을 실시하였다. 다음 날인 7월 6일 본영을 출발해 노량(露梁: 경상남도 남해군 설천면 노량리)에 이르러 원균이 이끌고 온 7척과 합세하니 3도의 전선은 모두 55척이었다.
7일 저녁 당포 앞바다에 이르러 목동 김천손(金千孫)에게 일본 전선 70여 척이 견내량(見乃梁: 거제시 사등면 덕호리)에 머무르고 있다는 말을 들었다. 8일 한산섬 앞바다에 이르러 이를 확인하였다. 그 때 일본 수군의 세력은 대선 36척, 중선 24척, 소선 13척 등 모두 73척으로서 지휘관은 수군장수 와키자카였다.
이순신은 견내량 주변이 좁고 암초가 많아서 판옥전선(板屋戰船)의 활동이 자유롭지 못한 것을 확인하고, 한산섬 앞바다로 유인해 격멸할 계획을 세웠다. 먼저 판옥전선 5, 6척이 일본 수군을 공격하여 반격해 오면 한산섬으로 물러나면서 유인하였다. 일본 수군들은 그 때까지 패전한 것에 대해 보복하려는 듯 의기양양하게 공격해 왔다.
싸울 기회를 포착한 이순신은 모든 전선이 학익진(鶴翼陣)을 짜서 공격하게 하였다. 여러 장수와 군사들은 지 · 현자총통(地玄字銃筒) 등 각종 총통을 쏘면서 돌진하였다. 싸움의 결과 중위장 권준(權俊)이 층각대선(層閣大船) 1척을 나포하는 것을 비롯해 47척을 분파(焚破)하고 12척을 나포하였다. 아군의 압도적 공세에서 겨우 살아남은 왜적 4백여 명은 배를 버리고 근처의 육지로 달아났다.
이 해전은 조선 수군의 큰 승리로 막을 내렸다. 격전 중 조선 수군의 사상자는 있었으나 전선의 손실은 전혀 없었다.
이 해전을 진주성대첩(晉州城大捷, 1592.10.5.∼10.) · 행주대첩(幸州大捷, 1593.2.12.)과 더불어 임진왜란 3대첩의 하나로 부른다. 이 대첩은 일본 수군의 주력을 거의 격파해 그들의 수륙병진계획을 좌절시켰다. 그리고 육지에서 잇단 패전으로 사기가 떨어진 조선군에게 승리의 용기를 주었다.
나아가 조선 수군이 남해안 일대의 제해권을 확보함으로써 이미 상륙한 적군에게도 위협을 주어, 그 때까지 매우 불리했던 임진왜란의 전세를 유리하게 전환할 수 있었다. 외국의 역사가 헐버트(Hulbert, H. G.)도 “이 해전은 조선의 살라미스(Salamis) 해전이라 할 수 있다. 이 해전이야말로 도요토미[豊臣秀吉]의 조선 침략에 사형선고를 내린 것이다…….”라고 감탄하였다.
이 해전과 하루 뒤에 벌어진 안골포(安骨浦: 창원시 진해구 안골동)해전을 승리로 이끈 전공으로 이순신은 정헌대부(正憲大夫, 정2품), 이억기 · 원균은 가의대부(嘉義大夫, 종2품)의 관계를 받았다.