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

对于实现两台机子的互备配置,本文作出了详细的介绍,之后的测试数据同步,在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 statusG;  *************************** 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服务器数据库里修改一条数据:

修改前:

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

 修改后:

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

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

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

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

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

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

可能存在问题

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

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

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

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

  3. 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教程

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享