主从复制
复制的基本原理
slave
会从master
读取binlog
来进行数据同步
MySQL复制过程分成三步:
master
将改变记录到二进制日志(binary log
)。这些记录过程叫做二进制日志事件,binary log events
;slave
将master
的binary log events
拷贝到它的中继日志(relay log
) ;slave
重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的
复制的基本原则:
- 每个
slave
只有一个master
- 每个
slave
只能有一个唯一的服务器ID - 每个
master
可以有多个salve
复制的最大问题是延迟。
一主一从常见配置
准备工作
一、mysql版本一致且后台以服务运行
二、主从都配置在[mysqld]结点下,都是小写
服务器配置
一、主机修改my.cnf配置文件:
1.、[必须]主服务器唯一ID:
server-id=1
2、[必须]启用二进制日志(指定日志存放位置)
log-bin=/var/lib/mysql/mysql-bin
3、 [可选]启用错误日志
log-err=自己本地的路径/mysqlerr
4、[可选]根目录
basedir="本地路径"
5、[可选]临时目录
tmpdir=“自己本地路径”
6、[可选]数据目录
datadir=“自己本地路径/Data/”
7、主机,读写都可以
read-only=O
8、[可选]设置不要复制的数据库
binlog-ignore-db=mysql
9、[可选]设置只复制某个数据库
binlog-do-db=需要复制的主数据库名字
二、从机修改my.cnf配置文件:
1、[必须]从服务器唯一ID
server-id=2
2、[可选]启用二进制日志
log-bin=/var/lib/mysql/mysql-bin
三、配置文件,请主机+从机都重启后台mysql服务
linux
中:
service mysql stop
service mysql start
如果你和我一样是用的docker
容器可以这样重启:
docker restart xxxxxx
四、在主机上建立帐户并授权slave
在主服务器上执行此命令,允许从服务器使用指定的用户名和密码连接到主服务器,并读取二进制日志进行数据复制。
创建用户并设置密码:
CREATE USER 'xxxx'@'从机器数据库IP' IDENTIFIED BY '123456';
授予用户复制权限:
GRANT REPLICATION SLAVE ON *.* TO 'xxxx'@'从机器数据库IP';
刷新权限
FLUSH PRIVILEGES;
GRANT
是MySQL中的一个命令,用于授予用户特定的权限。REPLICATION SLAVE
是授予的权限类型,允许指定用户读取主服务器的二进制日志,以便进行数据复制。ON *.*
:*.*
表示权限适用于所有数据库和所有表。也就是说,这个用户可以访问主服务器上的所有数据库进行复制操作。TO 'xxxx'@'从机器数据库IP'
:xxxx
是要创建或更新的用户名,不要使用root
IDENTIFIED BY
用于设置或更新指定用户的密码,123456
是该用户的密码。
查询master
的状态
show master status;
记录下File
和Position
的值
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
五、在Linux从机上配置需要复制的主机
在MySQL命令行中执行以下命令:
CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='xxxx',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='File文件名',
MASTER_LOG_POS=Position数字;
启动从服务器复制功能:
start slave;
查看主从配置状态:
show slave status\G
下面两个参数都是Yes
,则说明主从配置成功!
如果上面的position
输错了,可以重置
reset slave;
然后暂停主从复制
stop slave;
重新配置
CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='xxxx',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='File文件名',
MASTER_LOG_POS=Position数字;
然后开启
start slave;
六、主机新建库、新建表、insert记录,从机复制
主机输入:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE testtable (id INT PRIMARY KEY, value VARCHAR(50));
INSERT INTO testtable VALUES (1, 'Hello World');
从机自动同步
七、如何停止从服务复制功能
stop slave;
如果有一段数据暂时不要,从机可以停止主从复制后,从主机那里查询新的position
刻度,重新开始复制。