数据库主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表。
首先安装mysql;
Mysql版本:MySQL 5.7.27
Master-Server(主服务器) : 192.168.92.18
Slave-Server (从服务器): 192.168.92.129
1. 修改Master-Server(主服务器) 配置
修改 my.cnf
配置 Master 以使用基于二进制日志文件位置的复制,必须启用二进制日志记录并建立唯一的服务器ID,否则则无法进行主从复制。
停止MySQL服务。
$ systemctl stop mysqld
开启binlog ,每台服务器设置不同的 server-id;
$ cat /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
启动MySQL服务
$ systemctl start mysqld
登录MySQL
$ mysql -uroot -p
创建用户
每个从库使用MySQL用户名和密码连接到主库,因此主库上必须有用户帐户,从库可以连接。任何帐户都可以用于此操作,只要它已被授予 REPLICATION SLAVE权限。可以选择为每个从库创建不同的帐户,或者每个从库使用相同帐户连接到主库
虽然不必专门为复制创建帐户,但应注意,复制用到的用户名和密码会以纯文本格式存储在主信息存储库文件或表中 。因此,需要创建一个单独的帐户,该帐户只具有复制过程的权限,以尽可能减少对其他帐户的危害。
mysql> CREATE USER ‘test’@’192.168.92.129’ IDENTIFIED BY ‘mima’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘test’@’192.168.92.129’;
2,Slave-Server 配置
跟上面的一样,先停止mysql;
设置server-id;
$ cat /etc/my.cnf
[mysqld]
server-id=2
如果要设置多个从库,则每个从库的server-id与主库和其他从库设置不同的唯一值。
配置主库通信
查看 Master-Server,binlog File 文件名称和 Position值位置;
要设置从库与主库进行通信,进行复制,使用必要的连接信息配置从库在从库上执行以下语句,将选项值替换为与系统相关的实际值
参数格式如下,
mysql> CHANGE MASTER TO
-> MASTER_HOST=’master_host_name’,
-> MASTER_USER=’replication_user_name’,
-> MASTER_PASSWORD=’replication_password’,
-> MASTER_LOG_FILE=’recorded_log_file_name’,
-> MASTER_LOG_POS=recorded_log_position;
由于我之前已经设置过了Slave,所以我这边需要先暂停这个slave,再设置;并reset slave all;
启动从服务器复制线程;
mysql> START SLAVE;
查看复制状态;
检查主从复制通信状态:
Slave_IO_State #从站的当前状态
Slave_IO_Running: Yes #读取主程序二进制日志的I/O线程是否正在运行
Slave_SQL_Running: Yes #执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
Seconds_Behind_Master #是否为0,0就是已经同步了
测试主从复制,在 Master-Server 创建测试库:
在 Slave-Server 查看是否同步过来;
一些常用命令:
查看主服务器的运行状态:show master status;
查看从服务器主机列表:show slave hosts;
获取binlog文件列表:show binary logs;
只查看第一个binlog文件的内容:show binlog events;
查看指定binlog文件的内容:show binlog events in ‘mysql-bin.000001’;