mysql主从复制和主主复制

    技术2026-08-09  18

    两台服务器CentOS 7.6,MySQL5.6

    A服务器IP:140.143.196.126  

    B服务器IP:152.136.142.183

    准备工作:如果是阿里或腾讯的服务器一定要在安全组的出入站规则里加入3306端口,在防火墙里放行3306端口!!!

    一、主从复制

    设A服务器为主:

    MySQL配置文件my.cnf(一般Linux中的MySQL配置文件都在/etc/my.cnf;windows中的配置文件为mysql.ini)

    开启二进制日志 log-bin=mysql-bin 数据同步的实质就是在其他的MySQL服务器上将这个数据变更的二进制日志再执行一遍。

    在A服务器中创建一个B服务器可以登录的MySQL用户(yh为用户名,123456为密码,可自行设定):

    mysql>GRANT REPLICATION SLAVE ON *.* TO ‘yh’@’152.136.142.183’ IDENTIFIED BY ‘123456’; mysql>FLUSH PRIVILEGES;

    查看A服务器MySQL二进制文件名与位置 (登录mysql:mysql -u root -p):

    mysql>SHOW MASTER STATUS;

    测试B服务器是否可以连接上A服务器上的MySQL(如果失败,请检查安全组和防火墙):

    mysql -h 140.143.196.126 -utest -p123456

    告知B服务器A服务器的MySQL二进制文件名与位置,在B服务器中执行(登录mysql:mysql -u root -p):

    CHANGE MASTER TO MASTER_HOST='140.143.196.126', MASTER_USER='yh', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1171;

    开启主从复制:

    #开启复制 mysql>START SLAVE; #查看主从复制是否配置成功 mysql>SHOW SLAVE STATUSG

    红框中两项都为Yes则成功 

     测试:

    在A服务器MySQL中执行:

    create database author; use author; create table info(id int auto_increment,name varchar(32),primary key(id)); insert into info(name) values('LIBAI'); select * from info;

      

    在B服务器MySQL中执行 

    use author; select * from info;

     可见同步成功!

    二、主主复制

    需要在MySQL配置文件中增加几项设置:

    A服务器:

    #任意自然数,保证两台MySQL主机不重复 server-id=1 #开启二进制日志 log-bin=mysql-bin #步进值auto_imcrement。一般有n台主MySQL就填n auto_increment_increment=2 #起始值。一般填第n台主MySQL。此时为第一台主MySQL auto_increment_offset=1 #忽略同步的mysql库,可不设置 binlog-ignore=mysql binlog-ignore=information_schema #要同步的数据库,默认所有库 replicate-do-db=author

    B服务器:

    #任意自然数,保证两台MySQL主机不重复 server-id=2 #开启二进制日志 log-bin=mysql-bin #步进值auto_imcrement。一般有n台主MySQL就填n auto_increment_increment=2 #起始值。一般填第n台主MySQL。 auto_increment_offset=2 #忽略同步的mysql库,可不设置 binlog-ignore=mysql binlog-ignore=information_schema #要同步的数据库,默认所有库 replicate-do-db=author

     在B服务器中增加MySQL用户:

    mysql>GRANT REPLICATION SLAVE ON *.* TO ‘yho’@’140.143.196.126’ IDENTIFIED BY ‘123456’; mysql>FLUSH PRIVILEGES;

    查看B服务器MySQL二进制文件名与位置 (登录mysql:mysql -u root -p):

    mysql>SHOW MASTER STATUS;

       

    告知A服务器B服务器的MySQL二进制文件名与位置,在A服务器中执行(登录mysql:mysql -u root -p):

    CHANGE MASTER TO MASTER_HOST='152.136.142.183', MASTER_USER='myh', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1129; #开启复制 mysql>START SLAVE; #查看主从复制是否配置成功 mysql>SHOW SLAVE STATUSG

     红框中都为Yes则为成功!

      

    测试主主复制:

    在AB服务器中各自添加数据

    A:

     

    B: 

     

    A: 

     

     

    可以看出配置成功!

    Processed: 0.011, SQL: 9