主从复制
主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
1. 复制的基本原理
slave会从master读取binlog来进行数据同步。
MySQL复制过程分为三步:
- master将改变记录到二进制日志(binary log)中;这些记录过程叫做二进制日志事件(binary log events)。
- slave将master的binary log events拷贝到它的中继日志(relay log)。
- salve重做中继日志中的事件,将改变应用到自己的数据库中;MySQL的复制是异步的且串行化的。
2. 复制的基本原则
复制需遵从一些基本规则,规则如下:
- 每个slave只有一个master
- 每个master只能有一个唯一的服务器ID
- 每个master可以有多个slave
3. 复制的最大问题
复制的最大问题就是数据复制有延迟。
4. 一主一从常见配置
该配置需满足mysql版本一致且后台以服务运行,主从都配置在mysqld
结点下,最好小写。
4.1 主机配置
我的主机选择的是windows,配置文件是my.ini
,参考配置文件如下
# configuration a master-salve replication
# master server id
server-id=1
# enabled binary log
log-bin=D:\MySQL\mysql-5.7.23-winx64\mysqlbin
# enabled error log [optional]
log-err=D:\MySQL\mysql-5.7.23-winx64\mysqlerr
# temp directory [optional]
tmpdir=D:\MySQL\mysql-5.7.23-winx64\mysqltmp
# close read-only
read-only=0
# set to ignore database [optional]
binlog-ignore-db=mysql
# set need database [optional]
# binlog-do-db=xxx
server-id=1
:主服务器唯一ID,[必须]log-bin=本地路径/mysqlbin
:启用二进制日志,[必须]log-err=本地路径/mysqlerr
:启用错误日志,[可选]tmpdir=本地mysql路径
:临时文件目录,[可选]read-only=0
:表示主机读写都可binlog-ignore-db=mysql
:设置不复制的数据库,[可选]binlog-do-db=xxx
:设置需要复制的数据库,[可选]
如WindowsMySQL无法启动,主机配置中仅保留[必须]项即可。
4.2 从机配置
我的从机使用的是WSL,mysql配置文件位于/etc/mysql
vim /etc/mysql/my.cnf
- 找到里面的
server-id
选项,开启并设置为2 - 找到并开启
log_bin
4.3 重启服务和关闭防火墙
配置过的MySQL都需重启一下服务
4.4 主机建立账户并授权
- 授权
GRANT REPLICATION SLAVE ON *.* TO 'zero'@'127.0.0.1' IDENTIFIED BY '123456';
- 刷新权限
FLUSH PRIVILEGES;
- 查询master状态,记录下
File
和Position
的值
4.5 从机配置复制的主机
- 配置连接到主机,注意:所有参数必须是主机最新参数!
CHANGE MASTER TO MASTER_HOST='127.0.0.1',
MASTER_USER='zero',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.000001',MASTER_LOG_POS=1700
- 启动从服务器复制功能
start slave;
- 查看从机状态,看是否配置成功,主要查看
Slave_IO_Running:Yes
和Slave_SQL_Running:Yes
这两个参数,都是Yes代表配置成功。
4.6 建立数据库,测试功能
- 主机新建数据库,新建表,插入数据
CREATE DATABASE test_tmp_db;
USE test_tmp_db;
CREATE TABLE dog(
id INT NOT NULL,
NAME VARCHAR(20)
);
INSERT INTO dog VALUES(1,"www");
- 从机查看数据库,使用数据库并查询
SHOW DATABASES;
USE test_tmp_db;
SELECT * FROM dog;
可以看到所有操作都同步到从机了。
4.7 停止复制功能
使用stop slave;
命令停止从主机同步数据。