该篇文章是基于下面的文章,进行进一步的搭建
Linux下MySQL 5.7.x版本单实例+多实例部署
1. 首先上一张MySQL主从复制工作原理
从上层来看,复制分成三步:
MySQL的主从复制将经过如下步骤:
1、当 master 主服务器上的数据发生改变时,则将其改变写入二进制事件日志文件中;
2、salve 从服务器会在一定时间间隔内对 master 主服务器上的二进制日志进行探测,探测其是否发生过改变,如果探测到 master 主服务器的二进制事件日志发生了改变,则开始一个 I/O Thread 请求 master 二进制事件日志;
3、同时 master 主服务器为每个 I/O Thread 启动一个dump Thread,用于向其发送二进制事件日志;
4、slave 从服务器将接收到的二进制事件日志保存至自己本地的中继日志文件中relay log;
5、salve 从服务器将启动 SQL Thread 从中继日志中读取二进制日志,在本地重放,使得其数据和主服务器保持一致;
6、最后 I/O Thread 和 SQL Thread 将进入睡眠状态,等待下一次被唤醒;
2. 接下来是实际的搭建步骤:
主从环境配置(一主一从)
配置主从MySQL配置文件
cd /usr/local/mysql-5.7.24/data/3306
vim my.cnf
#主(3306)里面加入
#表示启用二进制日志
log-bin=mysql-bin
#表示server编号,编号要唯一
server-id=3306
cd /usr/local/mysql-5.7.24/data/4406
vim my.cnf
#从(4406)里面加入
#表示server编号,编号要唯一
server-id=4406
#表示只读
read_only=1
3. 主从服务启动
进入/usr/local/mysql-5.7.24/bin目录,重启两个MySQL服务,启动时指定配置文件启动:
cd /usr/local/mysql-5.7.24/bin
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3306/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/4406/my.cnf &
至此,我们的两个MySQL只有主从角色,它们之间还没有建立主从关系;
4. 主从设置 (真正建立主从关系)
(1)、在主数据库上创建copy账号,并授权
cd /usr/local/mysql-5.7.24/bin
./mysql -uroot -p -P3306 -h127.0.0.1
grant replication slave on *.* to 'copy'@'%' identified by 'copy';
(2)、在主数据库中执行命令,查看主服务器状态:
show master status;
(3)、如果主服务状态不是初始状态,建议重置状态:
reset master;
4. 下面开始对从库做一些操作:
1)、查看从服务器状态:
cd /usr/local/mysql-5.7.24/bin
./mysql -uroot -p -P4406 -h127.0.0.1
show slave status;
2)、如果从服务器不是初始状态,建议重置一下:
#停止复制
stop slave;
# 重置从机器状态
reset slave;
3)、在从服务器上执行命令,设置从服务器的master服务器,注意IP和端口
change master to master_host='192.168.197.128',master_user='copy',
master_port=3306,master_password='copy',
master_log_file='mysql-bin.000001',master_log_pos=154;
4)、在从机器上执行开始复制命令:
start slave;
至此一个一主一从搭建完成;
5. 主从验证,:
#检查 从数据库 复制功能状态
show slave status \G
主数据库3306创建数据库、表、数据,然后在从数据库4406上查看是否已经复制.
以上操作过程若显示正常,则主从服务器配置完成;
在主数据库上,可以查看主从复制binlog日志文件内容,可执行:
show binlog events in 'mysql-bin.000001';
mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续
跳过错误有两种方式:
1.跳过指定数量的事务:
mysql>stop slave;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
mysql>start slave;
2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误
show slave status \G
此命令也可以看到从库复制的错误信息。