mysql主从复制

基本原理

slave会从master读取binlog来进行数据同步

三步骤

QxgIlq.png

  1. master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中。Mysql复制是异步的且串行化的

基本原则

  1. 每个slave只有一个master
  2. 每个slave只能有唯一的服务器ID
  3. 每个master可以有多个salve

最大问题

延时

一主已从常见配置

mysql版本一致且后台以服务运行;
主从都配置在[mysqld]节点下,都是小写。

主机配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 必须 服务器唯一ID
server-id=1

# 必须 启用二进制日志
# 如:log-bin=D:/Mysql5.5/data/mysqlbin
log-bin=自己的本地路径/mysqlbin

# 可选 启用错误日志
# 如:log-bin=D:/Mysql5.5/data/mysqlerr
log-err=自己的本地路径/mysqlerr

# 可选 根目录
basedir="D:/Mysql5.5/"

# 可选 临时目录
tmpdir="D:/Mysql5.5/"

# 可选 数据目录
datadir="D:/Mysql5.5/data/"

# 设置读写权限(主机应是读写都可)
read-only=0

# 可选 设置不要复制的数据库
binlog-ignore-db=mysql

# 可选 设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字

从机配置文件

1
2
3
# 必须 从服务器唯一ID

# 可选 启用二进制日志

主机授权从机访问

1
2
3
4
5
6
7
8
9
# 授权
GRANT REPLICATION SLAVE ON 数据库名.表名 TO 'username'@'从库IP' IDENTIFIED BY 'password';

# 刷新权限
flush privileges;

# 查询主机状态, 记录下File和Position的值
# 每次配置都需要记录新的File和Position的值。
show master status;

从机设置访问账户

1
2
3
4
5
6
7
8
9
10
# 设置访问主机的账户、数据起始位置等
CHANGE MASTER TO MASTER_HOST='主机IP', MASTER_USER='username', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysqlbin.具体数字', MASTER_LOG_POS=具体数值;

# 开启服务器复制功能
start slave;

# 查询从机状态。以下两个参数都是Yes说明配置成功
# Slave_IO_Running:Yes
# Slave_SQL_Running:Yes
show slave status\G

停止从机复制服务

1
stop slave;