原理
主服务器上面的任何修改都会保存在二进制日志( Bin-log日志) 里面。 从服务器上面启动一个I/O线程, 连接到主服务器上面请求读取二进制(Bin-log)日志,然后把读取到的二进制日志写到本地的Realy-log(中继日志)里面。 从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
需要准备两台主机,一台为主库(master),一台为从库(slave)
两台都需安装mysql
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
yum install -y mysql-community-server --nogpgcheck --disablerepo mysql80-community --enablerepo mysql57-community
注意,如果是第一次安装mysql,需要先启动mysql并修改登陆密码,以防mysql无法使用(防火墙记得关闭)
1.主库开启binlog日志和serverid
# 注意如果binlog日志位置是不存在的需要创建,而且属主属组需要是mysql用户
mkdir -p /var/lib/mysql/mysql-bin
# 在配置文件中添加如下内容
vim /etc/my.cnf
server-id=1
log-bin=/var/lib/mysql/mysql-bin
# 重启mysql
systemctl restart mysqld
2.主库进入数据库创建用户
-- 创建slave用户并设置密码,用于从库连接
grant all privileges on *.* to 'slave'@'%' identified by 'Qwer@123';
-- 重新加载授权表
flush privileges;
3.主库重新刷新日志并查看日志位置
-- 进入mysql
-- 刷新日志
reset master
-- 查看
show master status\G
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
4.对从库–从库开启serverid
# 编辑配置文件
vim /etc/my.cnf
server-id=2
# 重启mysql
systemctl restart mysqld
5.从库配置主从
-- 进入mysql
-- 连接主库
CHANGE MASTER TO
MASTER_HOST='192.168.64.11', -- 主库ip
MASTER_USER='slave', -- 主库所创用户
MASTER_PASSWORD='Qwer@123', -- 密码
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
6.从库启动slave并查看
-- 执行
start slave
-- 查看
show slave status\G
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.64.11
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: centos7-ws-relay-bin.000001
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: YES -- 两个YES表示成功
Slave_SQL_Running: YES
...
7.测试
-- 主库创建zhuj数据库
mysql> create database zhuj;
Query OK, 1 row affected (0.02 sec)
-- 从库也对应创建了zhuj数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| zhuj |
+--------------------+
4 rows in set (0.01 sec)
备注:如果出现错误
stop slave
reset slave # 执行后重新执行步骤5就可以了