搭建步骤1、拉取镜像dockerpullmysql:latest2、查看镜像dockerimagesmysqllatestc8562eaf9d815monthsago546MB3、创建启动容器 Masterdockerrunp3306:3306namemysqlmastereMYSQLROOTPASSWORD123456dmysql:latest Slavedockerrunp3307:3306namemysqlslaveeMYSQLROOTPASSWORD123456dmysql:latest MySQL主数据库端口为3306,容器名称为mysqlmaster,默认密码为123456,d为后台运行。 MySQL从数据库端口为3307,容器名称为mysqlslave,默认密码为123456,d为后台运行。4、配置Master 进入容器:dockerexecitmysqlmasterbinbash 修改配置文件:cdetcmysqlvimmy。cnfbash:vim:commandnotfound 找不到vim命令解决:更新包aptgetupdate安装vimaptgetinstallvimy 修改配置文件,添加如下配置:同一局域网内注意要唯一serverid1开启二进制ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a功能,二进制文件名称logbinmasterbin二进制ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a格式,有row、statement、mixed三种格式,row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。binlogformatROW同步的数据库名称,如果不配置,表示同步所有的库binlogdodb数据库名 重启容器:dockerrestartmysqlmaster5、配置Slave 进入容器:dockerexecitmysqlslavebinbash 修改配置文件如下:同一局域网内注意要唯一serverid2开启二进制ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a功能,二进制文件名称logbinslavebin二进制文件的格式binlogformatROW 重启容器:dockerrestartmysqlslave6、开启MasterSlave主从复制 进入master容器或者通过MySQL客户端工具,执行showmasterstatus查看master状态,记录相关信息。FilePositionBinlogDoDBBinlogIgnoreDBExecutedGtidSetmasterbin。000007156 查看master容器的独立IP:dockerinspectformat{{。NetworkSettings。IPAddress}}mysqlmaster172。17。0。4 进入slave容器或者通过MySQL客户端工具,执行如下命令:changemastertomasterhost172。17。0。4,masteruserroot,masterpassword123456,masterport3306,masterlogfilemasterbin。000007,masterlogpos156,masterconnectretry60;masterhost:master的容器独立IPmasterport:master的容器端口号masteruser:用于同步数据的用户masterpassword:用于同步数据的用户密码masterlogfile:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值masterlogpos:从哪个Position开始读,即上文中提到的Position字段的值masterconnectretry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 启动slave:startslave 查看slave状态:showslavestatusG;1。rowSlaveIOState:WaitingformastertosendeventMasterHost:172。17。0。4MasterUser:rootMasterPort:3306ConnectRetry:30MasterLogFile:masterbin。000007ReadMasterLogPos:4187RelayLogFile:a40ee670e244relaybin。000002RelayLogPos:4356RelayMasterLogFile:masterbin。000007SlaveIORunning:YesSlaveSQLRunning:YesReplicateDoDB:ReplicateIgnoreDB:ReplicateDoTable:ReplicateIgnoreTable:ReplicateWildDoTable:ReplicateWildIgnoreTable:LastErrno:0LastError:SkipCounter:0ExecMasterLogPos:4187RelayLogSpace:4572UntilCondition:NoneUntilLogFile:UntilLogPos:0MasterSSLAllowed:NoMasterSSLCAFile:MasterSSLCAPath:MasterSSLCert:MasterSSLCipher:MasterSSLKey:SecondsBehindMaster:0MasterSSLVerifyServerCert:NoLastIOErrno:0LastIOError:LastSQLErrno:0LastSQLError:ReplicateIgnoreServerIds:MasterServerId:1MasterUUID:77e35acbbfb011eb95130242ac110002MasterInfoFile:mysql。slavemasterinfoSQLDelay:0SQLRemainingDelay:NULLSlaveSQLRunningState:SwaitingformoreupdatesMasterRetryCount:86400MasterBind:LastIOErrorTimestamp:LastSQLErrorTimestamp:MasterSSLCrl:MasterSSLCrlpath:RetrievedGtidSet:ExecutedGtidSet:AutoPosition:0ReplicateRewriteDB:ChannelName:MasterTLSVersion:Masterpublickeypath:Getmasterpublickey:0NetworkNamespace: 看到SlaveIORunning:Yes,SlaveSQLRunning:Yes说明启动成功了。7、关闭主从 进入slave容器mysql客户端8、主从测试 通过MySQL客户端自主创建数据库表。。。不展示了。。。相关命令语法拉取镜像dockerpull{镜像名称}:{版本号(默认为latest)}查看镜像dockerimages创建启动容器dockerrunp{对外暴露端口}:{容器内端口}name{自定义容器名称}e{参数}d{镜像名称}:{版本号}重启容器dockerrestart{容器id或者容器名称}进入容器dockerexecit{容器id或者容器名称}binbash查看容器信息或指定信息dockerinspect{容器id或者容器名称}dockerinspectformat{{。NetworkSettings。IPAddress}}{容器id或者容器名称}