初平三年(192),青州黄巾军向兖州推进,杀刺史刘岱,一时州中无主。曹操故友鲍信及州吏万潜到东郡,迎请曹操到兖州主事。曹操出任兖州牧后,领兵于寿张(今山东东平)攻击农民军。农民军奋力抵抗,杀死鲍信,但损失过重,不得不向济北(今山东济南长清区)撤退。曹操纵兵穷追,黄巾军战败投降。曹操得降兵三十余万,男女百余万众。他选拔其中精锐,号为“青州兵”,发展壮大了自己的武装力量。
曹操在兖州还未喘过气,朝廷委派的兖州刺史金尚来就任。曹操毫不客气,派兵迎击。金尚奔南阳,求救于袁术。袁术联合公孙瓒,向曹操和袁绍进攻。袁绍先击败公孙瓒,初平四年(193)春,曹操也击败袁术,在兖州站稳了脚跟。这年秋天,他挥戈徐州,准备向东发展势力。
徐州牧陶谦曾助公孙瓒威胁兖州,其部将张闿又将曹嵩杀死,并且抢去大批财物。曹操以替父复仇为名攻入徐州,连下十多个城池,屠杀百姓数十万,直抵彭城(今江苏徐州)。由于军粮不济,于兴平元年(194)春退兵回兖州。同年夏天,他又领兵征徐州,连得五城,“所过多所残戮”。进至下邳(今江苏睢宁西北)时,遭徐州军堵截。此时兖州发生内乱,曹操闻讯,急速撤军而回。
曹操征徐州,以荀彧、程昱留守兖州。陈留太守张邈对曹操任州牧,位居自己之上心中不悦。陈宫也因兖州名士边让被曹操借故杀害而心存疑惧。二人串通,利用自己在兖州的影响,趁曹操东征、内部空虚之机,举兵反曹,迎吕布来兖州作州牧。一时间,“郡县皆应”,仅鄄城(今山东鄄城)、范(今河南范县)、东阿(今山东东阿)三地在曹操手中。曹操回军,同吕布战于濮阳,攻入城后,巷战不利,险些被吕布骑兵抓住。他骑马冲出火阵,手被烧伤。两军相持一百多天后,均因军粮用尽,各自退兵。曹操战场失利,兖州地盘大半丧失,军队乏食,处境艰难。
兴平二年(195)春,曹操经过休整,着手收复兖州失地。他袭击定陶(今山东菏泽定陶区)未破,恰逢吕布领兵来救,便击败吕布,转而攻打钜鹿(今山东巨野),大败吕布,杀其将薛兰。吕布、陈宫又领兵来战,曹操兵少,设埋伏用奇兵,挫败吕布,进而攻占定陶,然后分兵平定周围反叛郡县,吕布逃奔徐州。张邈跟随其后,被部下杀死。曹操重新控制了兖州,巩固了自己的地盘。这年十月,朝廷任命曹操为兖州牧。