Docker mysql 主从配置详解及实例
Dockermysql主从配置
1、首先创建两个文件my-m.cnf(主库配置)、my-s.cnf(从库配置)
my-m.cnf内容如下
#Copyright(c)2014,Oracleand/oritsaffiliates.Allrightsreserved. # #Thisprogramisfreesoftware;youcanredistributeitand/ormodify #itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby #theFreeSoftwareFoundation;version2oftheLicense. # #Thisprogramisdistributedinthehopethatitwillbeuseful, #butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof #MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe #GNUGeneralPublicLicenseformoredetails. # #YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense #alongwiththisprogram;ifnot,writetotheFreeSoftware #Foundation,Inc.,51FranklinSt,FifthFloor,Boston,MA02110-1301USA # #TheMySQLCommunityServerconfigurationfile. # #Forexplanationssee #http://dev.mysql.com/doc/mysql/en/server-system-variables.html [client] port=3306 socket=/var/run/mysqld/mysqld.sock [mysqld_safe] pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock nice=0 [mysqld] user=mysql pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock port=3306 basedir=/usr datadir=/var/lib/mysql tmpdir=/tmp lc-messages-dir=/usr/share/mysql explicit_defaults_for_timestamp log-bin=mysql-bin server-id=1 #Insteadofskip-networkingthedefaultisnowtolistenonlyon #localhostwhichismorecompatibleandisnotlesssecure. #bind-address=127.0.0.1 #log-error=/var/log/mysql/error.log #RecommendedinstandardMySQLsetup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #Disablingsymbolic-linksisrecommendedtopreventassortedsecurityrisks symbolic-links=0 #*IMPORTANT:Additionalsettingsthatcanoverridethosefromthisfile! #Thefilesmustendwith'.cnf',otherwisethey'llbeignored. # !includedir/etc/mysql/conf.d/
主要是这两行,只需要在原来的配置里面加上就行
log-bin=mysql-bin
server-id=1
my-s.cnf内容如下
#Copyright(c)2014,Oracleand/oritsaffiliates.Allrightsreserved. # #Thisprogramisfreesoftware;youcanredistributeitand/ormodify #itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby #theFreeSoftwareFoundation;version2oftheLicense. # #Thisprogramisdistributedinthehopethatitwillbeuseful, #butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof #MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe #GNUGeneralPublicLicenseformoredetails. # #YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense #alongwiththisprogram;ifnot,writetotheFreeSoftware #Foundation,Inc.,51FranklinSt,FifthFloor,Boston,MA02110-1301USA # #TheMySQLCommunityServerconfigurationfile. # #Forexplanationssee #http://dev.mysql.com/doc/mysql/en/server-system-variables.html [client] port=3306 socket=/var/run/mysqld/mysqld.sock [mysqld_safe] pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock nice=0 [mysqld] user=mysql pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock port=3306 basedir=/usr datadir=/var/lib/mysql tmpdir=/tmp lc-messages-dir=/usr/share/mysql explicit_defaults_for_timestamp log-bin=mysql-bin server-id=2 #Insteadofskip-networkingthedefaultisnowtolistenonlyon #localhostwhichismorecompatibleandisnotlesssecure. #bind-address=127.0.0.1 #log-error=/var/log/mysql/error.log #RecommendedinstandardMySQLsetup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #Disablingsymbolic-linksisrecommendedtopreventassortedsecurityrisks symbolic-links=0 #*IMPORTANT:Additionalsettingsthatcanoverridethosefromthisfile! #Thefilesmustendwith'.cnf',otherwisethey'llbeignored. # !includedir/etc/mysql/conf.d/
同样,主要的是这两行
log-bin=mysql-bin
server-id=2
2、OK,有了配置文件,就可以启动MySQL了,先启动主库
$dockerrun-d-eMYSQL_ROOT_PASSWORD=admin--namemysql-master-v/soft/my-m.cnf:/etc/mysql/my.cnf-p3307:3306mysql
3、启动从库
$dockerrun-d-eMYSQL_ROOT_PASSWORD=admin--namemysql-slave-v/soft/my-s.cnf:/etc/mysql/my.cnf-p3308:3306mysql
4、连接主库,并运行以下命令,创建一个用户用来同步数据
$GRANTREPLICATIONSLAVEON*.*to'backup'@'%'identifiedby'123456';
5、查看主库状态
$showmasterstatus;
记住File、Position的值,如果没查到数据,请检查第一、第二步,配置问题。
我查出来的是mysql-bin.000004、312
6、连接到从库,运行以下命令,设置主库链接
$changemastertomaster_host='121.32.32.54',master_user='backup',master_password='123456',
master_log_file='mysql-bin.000004',master_log_pos=312,master_port=3307;
7、启动同步
$startslave;
8、查看同步状态
$showslavestatus
如果看到Waitingformastersendevent..什么的就成功了,你现在在主库上的修改,都会同步到从库上
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!