主从复制原理介绍:
- Master服务器数据提交后,会将数据写入到Binary log中
- Slave服务器通过IO线程监听Binary log日志,如果该日志发生变化,会将内容读取到并写入relay log(中继日志)中。
- Relay线程监听relay log,如果该日志发生变化会将该日志增量的写操作执行一遍,写入数据文件。
硬件规划(虚机)
主机名 | OS | IP | 用途 | 备注 |
CentOS 7_107 | CentOS7 | 192.168.1.107 | Master/写 | Mysql8 |
CentOS 7_108 | CentOS7 | 192.168.1.108 | Slave/读 | Mysql8 |
CentOS 7_109 | CentOS7 | 192.168.1.109 | Slave/读 | Mysql8 |
创建三台虚机,一台为主,两台从机。
主从复制具体实现步骤:
- Master主服务器配置
- 修改my.cnf
vi /etc/my.cnf
#启用二进制文件
log-bin=mysql-bin
#设置服务器唯一ID,用于区分主从服务器。
server-id=107
- 重启Mysql服务
systemctl restart mysqld
- 登录Mysql给Slave服务器授权限
mysql -uroot -p
输入mysql密码回车,进入到mysql界面
- 在Master库创建一个账号,具备Replication Slave权限,提供给Slave库访问二进制日志使用。
CREATE USER 'sluser'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'sluser'@'%';
- 刷新权限
flush privileges;
- 查看Master状态
show master status;
2.Slave从服务器的配置
108,109服务器为Slave从服务器,以下只演示了108的从服务器配置,109与108的配置方式一致,就不在此重复。
- 修改my.cnf
vi /etc/my.cnf
新增如下内容
server-id=108
replay-log=mysql-bin
- 登录mysql并配置从服务器
设置从服务器对主服务器的监听
CHANGE MASTER TO MASTER_HOST='192.168.1.107',MASTER_USER='sluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1707;
说明:
MASTER_HOST:master的ip或虚ip或域名
MASTER_USER:master上之前创建的登录账户名
MASTER_PASSWORD:创建的登录账户密码
MASTER_LOG_FILE:master的file
MASTER_LOG_POS:master的position
- 启动从服务器复制功能
start slave;
- 查看从服务器的状态
show slave status \G
如果Slave_IO_Running:Yes
Slave_SQL_Running: Yes,说明我们的从服务器配置成功,主从复制的配置都已完成。
3.测试主从复制功能
- 主服务器创建数据库并新增t_user表
create database testdb;
use testdb;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `t_user` VALUES (1, 'test', 25);
- 从服务器上查看数据库
show databases;
use testdb;
show tables;
select * from t_user;
可以看到在主服务器创建的表和写入的数据在从服务器中也能查询到,表明我们的主从复制配置成功。