日军进攻平壤的准备活动,早在成欢战役前就已开始。
7月23日,混成旅团长大岛义昌就向平壤一带派出骑探,进行侦察活动。成欢战役后,大岛义昌立即派出两个步兵大队的先遣队,于8月8日、12日先后由汉城北上。及第五师团、第三师团各部分别由釜山、元山、仁川登陆后,立即分道向平壤进犯。进犯日军共分四路,采取分进合击、四面包围的战术:
由大岛义昌少将率领混成第九旅团,3600余人,于9月1日由汉城出发,循汉城至平壤大道。经开城、金川、瑞兴、凤山、黄州、中和而达平壤;
第五师团本队由师团长野津道贯中将率领,共5400余人,于9月1日自汉城出发,经高阳、临津、金川、瑞兴、凤山、黄州,由此折而西行,自十二浦渡大同江至平壤;
由步兵第十旅团长立见尚文少将率领的第十旅团,2400余人,称朔宁支队。亦由汉城出发,沿朔宁、新汐、遂安、祥原,经江东县由麦田店渡大同江,绕攻平壤北面;
由元山登陆之第三师团混成旅团第十八联队,在联队长佐藤正大佐指挥下,其兵力4100余人,称元山支队。于9月1日由元山出发西行,经文川、阳德、成川,渡大同江进逼平壤西北之顺安。
日军进攻平壤的四支部队总共约16100余人,日军的战略意图是:
混成第九旅团于9月12日到达大同江南岸,进行诱战以牵制清军。吸引清军注意力,以便第五师团本队及朔宁、元山支队从左、右翼及背后进行包围攻击;
元山支队于14日到达顺安,切断清军向义州的退路。15日与朔宁支队会合,从北面加入对平壤的攻击;
朔宁支队于13日由麦田店渡大同江,14日至大地境洞,由平壤东北方向发动进攻;
第五师团本队自黄州西十二浦,由下游渡大同江,出江西县,进攻平壤西南面。
各队于9月15日前完成对平壤的包围,15日凌晨发起总攻,以便一举攻破平壤,将清军驱逐出朝鲜。
9月15日午夜,日军开始了总攻。
日军混成第九旅团分左、中、右三路,向大同江左岸清军阵地发起进攻。
凌晨3时许,进攻的日军右翼及中路两队,接近清军江左岸桥头堡垒。守垒清军立即奋起还击,子弹雨点般射向日军。
大同江右岸的清军大炮也隔江发炮向日军侧面轰击,硝烟蔽天,炮声震地。清军频频发射的连发铳子弹掠过树枝头,恰如疾风扫落叶一般。
日军进攻部队暴露在垒外开阔地面,毫无掩蔽,伤亡颇重。第十一联队中队长林久实大尉、第二十一联队附细井有顺中尉、第十一联队附今井健中尉等当场被击毙。
日军中、右两队司令官武田秀山中佐和西岛助义中佐驱赶士兵,拼死冲击。西岛下令“宁死勿退”。日军被迫分别向大道两侧的左翼和右翼堡垒发起冲锋。
在日军优势兵力进攻下,两翼堡垒被攻陷。这时守卫在大同江渡口桥头堡及江北各堡垒的清军,互相配合,用猛烈炮火向占据大道左右两翼堡垒的日军进行夹击。日军死伤甚众,第十一联队第一中队将校悉数战死或负伤,第二十一联队第一大队第二、第四中队,官兵全部战死。
清军见状,立即从桥头堡中冲杀而出,向日军发起反冲锋。日军阵脚大乱,司令官西岛中佐挥刀督战,不准士兵后退。
两军展开白刃格斗。在双方步兵进行鏖战的同时,两军炮兵也展开激烈的炮战。对射不久,日本炮兵中队山本大尉以下24名官兵中弹负伤,器材被毁。
战至拂晓7时,清军派出了增援部队,补充了弹药,士气大振。
上午10时,日军中路第十中队企图攻占中碑街西方江岸堡垒,受到清军步炮十字火力的射击。同时,清军发起反攻,将日军击退。
日军发动第二次冲锋亦未奏效。中队长负伤,小队长以下非伤即死,被迫后退。这时,清军炮火愈战愈强,而日军自午夜零时出发,滴水未进,士兵饥疲不堪,各队弹药亦将用尽。尤其“中央队战线弹药全部射尽,且将校多数伤亡”,已无力再战。
至午后1时,大岛义昌只得下令退却。
各路日军接到命令后,于午后2时许狼狈退离战场。
这一仗,日军遭受了重大伤亡。
据日方公布的数字是:将校以下死者约140名,伤者约290名。其中中队长级大尉军官被击毙4名,中尉军官被击毙2名。第九混成旅团长大岛义昌少将、第二十一联队长西岛助义中佐、炮兵第五联队第三大队长永田龟少佐均被击伤。
清军取得了重大胜利。日人杉浦梅潭曾写诗来描绘这次战斗的艰苦和日军的惨重伤亡:“霜惨烈,风萧索,吾军衔枚乘暗斫。平壤壁,大同江,古来天险称无双。土器店头砦栅固,炮雷进袭弹雨注。……蹀血登,蹈尸进,白日黯,山河腥,此役不克旗下死,呜呼苦战船桥里。”