CentOS7搭建MySQL5.7主从复制

MySQL主从复制的优点:
1、 如果主服务器出现问题, 可以快速切换到从服务器提供的服务,保证高可用性
2、 可以在从服务器上执行查询操作, 降低主服务器的访问压力
3、 可以在从服务器上执行备份, 以避免备份期间影响主服务器的服务

注意事项:
1、server-id必须唯一,一般使用ip的后三位
2、从库Slave_IO_Running:NO 可能原因:帐号无权限操作
3、Can't execute the query because you have a conflicting read lock,解锁下即可 unlock tables;
4、一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询, 实时性要求高的数据仍然需要从主数据库获得
5、修改完主从服务器的配置需要重启mysql:service mysqld restart

主机A: 192.168.230.129
从机B: 192.168.230.130

请先分别安装mysql,版本需一致,装了即可跳过

yum install mysql mysql-server #输入y即可自动安装,直到安装完成

1、先登录主机 A,在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE(从复制)赋予权限,如:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.10.124' IDENTIFIED BY '123456'
赋予从机权限,有多台从机,就执行多次。
mysql>flush privileges;

编辑/etc/my.cnf文件:

log-bin = mysql-bin #slave会基于此log-bin来做replication
server-id = 129 #master的标示,唯一ID,一般采用IP最后一段 
innodb_flush_log_at_trx_commit = 1 #默认为1,事务提交,日志缓冲刷盘
sync_binlog = 1 #当每进行n次事务提交之后刷盘,安全但性能低

 

Slave配置:

编辑/etc/my.cnf文件:

server-id = 130

 

重启MySQL服务:

systemctl restart mysqld.service

在Master服务器上创建备份账号:

GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.%.%' IDENTIFIED BY '密码';

 

在Master库中查看master状态:

show master status;

查看结果:

CentOS7搭建MySQL5.7主从复制

 

配置从库:进入mysql,

stop slave; 
change master to master_user='backup',master_password='密码',master_host='192.168.1.129',master_port=3306,master_log_file='mysql-bin.000003',master_log_pos=154; 
start slave;

参数说明:

master_user:Master服务器上创建的备份账号名称
master_password:备份账号密码
master_host:Master服务器IP
master_log_file:查询Master服务器状态得到的File列的值
master_log_pos:查询Master服务器状态得到的Position列的值

 

在Slave库查询复制状态:

show slave status\G;

如果Slave_IO及Slave_SQL的状态为Yes表明同步成功。

最后,如果Master重启后Slave也必须重启,否则会出现同步失败。

执行成功后,再输入“SHOW SLAVE STATUS\G”检查配置是否正确,如下所示
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 10.10.1.55
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 4
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: No
 
Slave_IO_State 为空,Slave_IO_Running 和 Slave_SQL_Running 均为 NO,表示复制并未运
行,
要启动复制还需运行命令“START SLAVE”
 
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.1.55
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 623
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 836
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
后记:
如果对mysql1再做一遍和mysql2类似的配置,即可把mysql1设置为mysql2的从库,实现“主-
主”热备结构。通常来说一个高可用的读写分离数据库架构至少需要三台服务器:一台主,一台
热备主,一台只读。
删除主从配置命令
reset master: 删除所有的二进制日志,并重新创建一个新的二进制日志
reset slave all: 从slave删除主从复制关系的位置信息,并完全的清理复制连接参数信息
 
 
mysql 重启的话 要 重放其二进制日志
 
查看是否开启二进制日志
w variables like '%log_bin%';
CHANGE MASTER TO MASTER_HOST='192.168.237.101',
MASTER_USER='repl',MASTER_PASSWORD='Root123!', MASTER_LOG_FILE='mysqlbin.000004', MASTER_LOG_POS=0;
 
master 主机意外停止运行,重启master 需要重新指向master 的二进制文件和pos
change master to master_host='192.168.237.101',master_user='repl',master_password='Root123!',master_log_file='mysql-bin.000007',master_log_pos=154;