Mysql 5.7.22主从复制
一、主从复制原理
MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个 log dump 输出线程,每一个从库都有它自己的 I/O 线程和 SQL 线程。
步骤:
1.主库会将所有的更新记录保存到 Binarylog 文件。
2.每当有从库连接到主库的时候,主库都会创建一个 log dump 线程发送 Binarylog 文件到从库。
3.当从库复制开始的时候,从库就会创建两个线程进行处理,一个 I/O 线程,一个 SQL 线程。
4.I/O 线程去请求主库的 Binarylog文件,并将得到的 Binarylog 文件写到 Relaylog 文件中。
5.SQL 线程会读取 Relaylog 文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
二、工具
VMware WorkStation Pro版本:12.5.7 build-5813279
REL版本:6.5
MySQL版本 :5.7.22
Master 服务器:192.168.1.117
Slave 服务器 :192.168.1.228
三、准备工作
1. 安装 MySQL5.7.22
2.如果从服务器是克隆的主服务器,则修改 auto.cnf(vi /var/lib/mysql/auto.cnf) 文件中 server-uuid 值
2. ,不然后面主从复制会报 1593 错误,修改完记得重启MySQL
3.关闭主、从服务器防火墙:
4.修改主从配置文件(my.cnf):vi /etc/my.cnf
#master 服务器地址
## 192.168.78.117(master)
bind-address=192.168.1.117
log_bin=mysql-bin
server_id=117
#slave 服务器地址
## 192.168.78.228(slave)
bind-address=192.168.1.228
log_bin=mysql-bin
server_id=228
重启主从 MySQL:
service mysqld restart
注: server_id 必须唯一。
5.master 上创建一个测试数据库(test):
$ create database test;
$ use test;
$ create table test(id int(11), value varchar(20));
$ insert into test values(1, 'aa'),(2, 'bb'),(3, 'cc');
$ create database test1;
$ use test1;
$ create table test1(id int(11), value varchar(20));
$ insert into test1 values(1, 'aa'),(2, 'bb'),(3, 'cc');
四、主从复制
1.master创建授权用户:
192.168.78.128(master):
## 创建 test 用户,指定该用户只能在主库 192.168.78.130 上使用 MyPass1! 密码登录
mysql> create user 'test1'@'192.168.1.228' identified by 'MyPass1!';
## 为 test 用户赋予 REPLICATION SLAVE 权限。
mysql> grant replication slave on *.* to 'test1'@'192.168.1.228';
flush privileges;
## 查看用户
mysql> select user,host from mysql.user;
## 查看 master 状态
mysql> show master status;
注:这里的 mysql-bin.000001和 Position 值 slave 配置时需要用到。
2.将 master 中现有的数据信息导出:
$ mysqldump -u root -p --all-databases --master-data > all.sql
3.将 all.sql 发送到 slave 服务器 tmp 目录下:
$ scp all.sql root@192.168.78.130:/tmp
4.slave 导入 master 数据,使 master-slave 数据保持一致:
192.168.78.130(slave):
$ mysql –u root -p < all.sql
5.使 slave 与 master 建立连接,从而同步(在从服务器上操作):
mysql> change master to
-> master_host='192.168.1.117',
-> master_user='test1',
-> master_password='MyPass1!',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=2193;
mysql> start slave;
mysql> show slave status \G
注:
l master_log_file 和 master_log_pos值为主库上面执行show master status得到
l 如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,说明配置成功
l 如果其中一项不为 Yes,查看 Last_IO_Errno 错误码和错误信息,或者查看 MySQL 日志信息并查找对应问题
五、主从配置检验
master 插入一条数据,slave查看是否成功