复制解决的基本问题是让一台服务器的数据与其他服务器保持同步!
MySQL复制数据步骤:
1.在主库上把数据更改记录到二进制文件(Binary Log)中(这些记录被称为二进制日志事件)
2.备库将主库上的日志复制到自己的中继日志(Relay Log)中。
3.备库读取中继日志中的事件,将其重放到备库数据之上。
实验环境:
虚拟机名 | 功能 |
---|---|
sever1 | 主库 |
server2 | 从库 |
MySQL传统复制是基于MySQL二进制文件和对应日志文件中每个事件的偏移量位置点
主库配置(server1):
1.下载安装包并解压:
tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
2.安装需要的安装包,删除其他多余的安装包
3.复制安装包给server2
scp * [email protected]:
vim /etc/my.cnf
log-bin=mysql-bin ## 允许slave同步自己的二进制文件
server-id=1 ## 数据库id号为1
5.开启mysqld:
systemctl start mysqld
6.查看数据库初始密码:
grep password /var/log/mysqld.log
mysql_secure_installation
8.进入主数据库,创建复制帐号。
MySQL会赋予一些特殊的权限给复制线程。在备库运行的I/O线程会建立一个到主库的TCP/IP连接。这意味着必须在主库创建一个用户,并赋予合适的权限。备库I/O线程以该用户名连接到主库并读取其二进制日志。通过以下语句来创建用户:
mysql> grant replication slave on *.* to repl@'172.25.77.%' identified by 'WESTOS+123redhat';
9.查看主库的状态:
mysql> show master status;
1.安装数据库
yum install m*
vim /etc/my.cnf
server-id=2 ## 数据库id号为2
3.开启数据库
systemctl start mysqld
4.查看数据库初始密码:
grep password /var/log/mysqld.log
5.从库安全初始化
mysql_secure_installation
6.根据主库的二进制文件和position号复制主库
mysql -p ##进入数据库
mysql> change master to master_host='172.25.77.1', master_user='repl', master_password='WESTOS+123redhat', master_log_file='mysql-bin.000002', master_log_pos=1003;
mysql> START SLAVE;
mysql> show slave status\G;
测试:
1.在主库上创建数据库,并添加数据。看是否从库同步:
mysql> create database westos;
mysql> use westos;
mysql> show tables;
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;
mysql> show databases;
mysql> use westos;
mysql> select * from usertb;
1.主库和从库的配置文件
vim /etc/my.cnf
gtid_mode=ON ### 开启gtid模式
enforce-gtid-consistency=true
2.查看主库所做操作
cd /var/lib/mysql
mysqlbinlog mysql-bin.000002
3.主库查看uuid
cat auto.cnf
systemctl restart mysqld
5.主库添加数据:
mysql> use westos;
mysql> insert into usertb values('user2','123');
mysql> insert into usertb values('user3','123');
mysql> select * from gtid_executed;
mysql> show slave status\G;
mysql> stop slave;
8.重新编写同步规则:
mysql> change master to master_host=‘172.25.77.1’, master_user=‘repl’, master_password=‘WESTOS+123redhat’, master_auto_position=1;
9.开启同步复制:
mysql> start slave;
mysql> show slave status\G;
主库(server1):
1.安装插件
INSTALL PLUGIN rpl_semi_sync_master soname 'semisync_master.so';
2.查看是否安装成功:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
3.激活插件
SET GLOBAL rpl_semi_sync_master_enabled=1;
备库(server2)
1.安装插件:
INSTALL PLUGIN rpl_semi_sync_slave soname 'semisync_slave.so';
2.激活插件:
SET GLOBAL rpl_semi_sync_slave_enabled=1;
stop slave io_thread;
4.开启I/O线程
start slave io_thread;
5.从库查看
show status like '%rpl%';
show variables like '%rpl%';
show variables like '%rpl%';
stop slave io_thread;
8.主库上查看:关闭
show variables like '%rpl%';
测试:
1.在主库上插入数据:
mysql> use westos;
mysql> insert into usertb values('user4','123');
mysql> use westos;
mysql> select * from usertb;
mysql> start slave io_thread;
4.从库查看(同步)
mysql> select * from usertb;
mysql> show processlist;