对于实现两台机子的互备配置,本文作出了详细的介绍,之后的测试数据同步,在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服务器数据库里修改一条数据:
修改前:
修改后:
查看10.168.0.126数据库中对应表中数据:
可以看到已经同步过来了。
反过来,修改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
需要注意的是,如果你只配置了从数据库同步主数据库数据,而未设置为互相同步 ,修改从数据库数据可能会导致同步失效。
相关文章:
相关视频: