MySQL异步复制 准备工作
准备工作
两台环境干净的rhel7版本虚拟机,数据库的压缩包
基于position的主从复制
解档并安装MySQL
tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm
主库
编辑配置文件
vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
其中
log-bin=mysql-bin ##文档最后加,二进制日志复制,id号来区分主机
systemctl start mysqld 启动mysql
cat /var/log/mysqld.log | grep password 查看生成一个临时密码
尝试连接,但是发现不能查看库
mysql> show databases;
安全初始化
mysql_secure_installation
执行初始化命令后,要求输入初始化密码,新密码要求有大小写,数字,特殊字符,其他全选y
完成后可以登录数据库
创建并授权用来做复制的用户
在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中
mysql> grant replication slave on *.* to repl@'172.25.136.%' identified by 'Wsp+123ld';
mysql> show plugins; ##查看插件,因为有密码插件,所以密码必须设置为复杂的
mysql> show master status; ##查看master状态
从库
初始化mysql
vim /etc/my.cnf
server-id=2
启动mysql
systemctl start mysqld
在物理机上尝试连接master的数据库,测试repl帐号
mysql -h 172.25.136.1 -urepl -pWsp+123ld
可以登录,但是查看不到任何信息,因为没有权限
在server2上配置master信息
mysql> change master to master_host='172.25.70.13', master_user='repl', master_password='Wsp+123ld', master_log_file='mysql-bin.000002', master_log_pos=1004;
MASTER_LOG_POS 它是日志的开始位置
其中master_log_file和maMASTER_LOG_POS的值为0,
因为它是日志的开始位置ster_log_pos写在server1上执行show master status看到的信息
mysql> start slave;
mysql> show slave status\G ##查看主从复制状态
测试
创建新数据测试主从同步是否生效
注意:写操作只能在master节点上做,因为master节点不会去同步slave节点的内容
mysql> create database westos; ##在server2上发现也能看到westos库
mysql> use westos
mysql> create table usertb (username varchar(10) not null,password varchar(15) not null); ##建表
mysql> desc usertb; ##查看表信息
mysql> insert into usertb values ('user1','123'); ##插入数据
mysql> select * from usertb; ##查看
show variables like 'log_%'; #查看二进制日志
主库中mysqlbinlog mysql-bin.000002 可以看到之前做的操作
基于gtid的主从复制
主库
vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
gtid_mode=ON
enforce-gtid-consistency=true
开启并进入数据库
systemctl start mysqld
mysql> grant replication slave on *.* to repl@'172.25.70.%' identified by 'Wsp+123ld';
mysql> show plugins;
mysql> show master status;
从库
编辑配置文件
vim /etc/my.cnf
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true
启动数据库
systemctl start mysqld 重启
如果前面已经部署过主从复制,需要先停止slave,
mysql> stop slave; ##先停止复制
mysql> CHANGE MASTER TO
-> MASTER_HOST = '172.25.70.13',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'Westos@123',
-> MASTER_AUTO_POSITION = 1;
##启用gtid,它是自动的
mysql> start slave;
mysql> show slave status\G ##查看状态,可以看到下面两个参数是空的
Retrieved_Gtid_Set:
Executed_Gtid_Set:
测试
在主库上插入数据
在从库上查看数据
在从库上查看状态,发现这两个参数变了,Retrieved_Gtid_Set:,Executed_Gtid_Set:
再查看gtid模式复制的起始和结束位置
mysql> use mysql
mysql> select * from gtid_executed;
小结
相同点:都需要主库授权,从库配置主库信息才可以实现主从复制
不同点:
1.配置文件参数不同
2.配置主库信息时的参数不同