两台mysql服务器实现双机互备配置并测试数据同步

来源:这里教程网 时间:2026-02-28 11:56:41 作者:

对于实现两台机子的互备配置,本文作出了详细的介绍,之后的测试数据同步,在10.168.1.44服务器数据库里修改一条数据, 可以看到数据已经同步过来了。反过来,修改10.168.0.126的数据,也可以看到10.168.1.44数据库中对应表数据改变。到此,10.168.0.126与10.168.1.44互为主从数据库关系。

相关mysql视频教程推荐:《mysql教程》

apache php mysql

前期准备

两台服务器:10.168.1.44

10.168.0.126

运行环境:Linux系统(Centos6.5)

Mysql版本:5.7.22

修改配置

在两台服务器上分别修改/etc/my.conf配置文件的信息如下:

在10.168.1.44服务器/etc/my.conf配置文件中添加:

server_id=10

log-bin=master_01    //开启二进制日志,作用是另一个服务器可以通过该日志来确定执行操作

binlog-do-db=test_db  //同步的表

binlog-do-db=my_test  //同步的表

在10.168.0.126服务器/etc/my.conf配置文件中添加:

server_id=20

log-bin=master_02    //开启二进制日志,作用是另一个服务器可以通过该日志来确定执行操作

binlog-do-db=test_db  //同步的表

binlog-do-db=my_test  //同步的表

添加之后执行命令  service mysqld restart 重启数据库使修改生效

添加mysql账户

添加mysql账户,通过给其授权用户执行数据同步

10.168.1.44执行命令:

GRANT FILE ON *.* TO 'copyuser'@'10.168.0.126' IDENTIFIED BY 'Admin@123';
GRANT REPLICATION SLAVE ON *.* TO 'copyuser'@'10.168.0.126' IDENTIFIED BY 'Admin@123';
flush privileges;

10.168.0.126执行命令:

GRANT FILE ON *.* TO 'copyuser'@'10.168.1.44' IDENTIFIED BY 'Admin@123';
GRANT REPLICATION SLAVE ON *.* TO 'copyuser'@'10.168.1.44' IDENTIFIED BY 'Admin@123';
flush privileges;

配置从数据库

10.168.1.44配置:

查看当前主数据库状态:

mysql> show master status;

记录当前的file与position的值;

进入10.168.0.126访问数据库查看其主数据库状态

在10.168.1.44执行

mysql>CHANGE MASTER TO
MASTER_HOST='10.168.0.126',
MASTER_USER='copyuser',
MASTER_PASSWORD='Admin@123',
MASTER_PORT=3306,
MASTER_LOG_FILE='master_02.000002',
MASTER_LOG_POS=1771,
MASTER_CONNECT_RETRY=10;
在10.168.0.126执行:
mysql>CHANGE MASTER TO
MASTER_HOST='10.168.1.44',
MASTER_USER='copyuser',
MASTER_PASSWORD='Admin@123',
MASTER_PORT=3306,
MASTER_LOG_FILE='master_01.000008',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=10;
注:若slave开启状态无法执行以上命令,需要首先执行 stop slave;关闭slave,执行完上述命令后执行start slave;命令开启slave。
上述命令执行完后,查看从服务状态:
执行命令:
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.168.1.44
                  Master_User: copyuser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: master_01.000008
          Read_Master_Log_Pos: 154
               Relay_Log_File: cdh-2-relay-bin.000004
                Relay_Log_Pos: 367
        Relay_Master_Log_File: master_01.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 740
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 10
                  Master_UUID: 778beb1e-8f0f-11e8-a815-00505695cd8c
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

 注意Slave_IO_Running: Yes与Slave_SQL_Running: Yes,只有当两个都为yes是才是配置成功。

测试数据同步

在10.168.1.44服务器数据库里修改一条数据:

修改前:

1.png

 修改后:

1.jpg

 查看10.168.0.126数据库中对应表中数据:

1.png

 可以看到已经同步过来了。

反过来,修改10.168.0.126的数据,也可以看到10.168.1.44数据库中对应表数据改变。

到此,10.168.0.126与10.168.1.44互为主从数据库关系

可能存在问题

    查看slave状态时,会发现Slave_IO_Running: Connecting

出现该问题主要有三个原因:

    网络不通(互相ping下试试看能否ping通)

    密码不对:查看在配置slave时执行的命令中的密码是否正确

    Position不正确:配置slave时对应position未填为正确的position(查看对应从服务器数据库的master状态:show master status即可找到 )

我出现这个问题的原因是只在一个服务器上创建了用于同步数据的用户‘copyuser’,另一个服务器数据库中并未创建该用户。创建之后OK了

    4.查看slave状态时,会发现Slave_SQL_Running: No

出现这个现象的原因主要就是两边数据库数据存在不同之处,可以通过查看mysql日志定位具体哪块数据出现异常

Mysql日志一般在/var/log/mysqld.log

需要注意的是,如果你只配置了从数据库同步主数据库数据,而未设置为互相同步 ,修改从数据库数据可能会导致同步失效。

相关文章:

Mysql 数据库双机热备的配置_MySQL

Mysql的实时同步-双机互备(双master)

相关视频:

MySQL数据管理之备份恢复案例解析视频教程

相关推荐