一 复制的基本原理
1 slave 会从 master 读取 binlog来进行数据同步
2 三个步骤
a master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
b slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)。
c slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化。
3 原理图
二 复制的基本原则
1 每个 slave 只有一个 master
2 每个 slave 只能有一个唯一的服务器 ID
3 每个 master 可以有多个 salve
三 复制的最大问题
延迟
四 一主一从常见配置
1 mysql 版本一致且后台以服务运行
2 主从都配置在[mysqld]结点下,都是小写
3 主机在 windows(192.168.14.165),修改 my.ini 配置文件
# 主服务器唯一 ID
server-id=1
# 启用二进制日志
# log-bin=自己本地的路径/data/mysqlbin
log-bin=D:/MySQL/MySQLServer 5.7/Data/mysqlbin
#(可选)启用错误日志,如果不设置,默认在 D:/MySQL/MySQLServer 5.7/Data 路径下
log-error="LAPTOP-BE0LNP1J.err"
#(可选)根目录
basedir="D:/MySQL/MySQLServer 5.7/"
#(可选)临时目录
tmpdir="D:/MySQL/MySQLServer 5.7/"
#(可选)数据目录
datadir=D:/MySQL/MySQLServer 5.7/Data
# 主机,读写都可以
read-only=0
#(可选)设置不要复制的数据库
binlog-ignore-db=mysql
#(可选)设置需要复制的数据库
# binlog-do-db=需要复制的主数据库名字
4 从机在 linux(192.168.14.167)上,修改 my.cnf 配置文件
# 从机服务
id server-id = 2
# 注意 my.cnf 中有 server-id = 1 ,要注释掉
# 设置中继日志
relay-log=mysql-relay
# (可选)启用二进制日志
5 因修改过配置文件,主机和从机都重启后台 mysql 服务
6 主机从机都关闭防火墙、安全工具(腾讯管家等)
7 在 Windows 主机上建立帐户并授权给 slave
# 创建用户,并授权
GRANT REPLICATION SLAVE ON *.* TO '备份账号'@'从机器数据库 IP' IDENTIFIED BY '123456';
flush privileges;
8 #查询 master 的状态
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysqlbin.000035 | 341 | | mysql | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
9 在 Linux 从机上配置需要复制的主机
# 查询 master 的状态
CHANGE MASTER TO MASTER_HOST='主机 IP',MASTER_USER='创建用户名',MASTER_PASSWORD='创建的密码', MASTER_LOG_FILE='File 名字',MASTER_LOG_POS=Position 数字;
10 启动从服务器复制功能
start slave
show slave status\G;
下面两个参数都是 Yes,则说明主从配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Ye
11 主机新建库、新建表、insert 记录,从机复制
a 主机操作
b 从机查看
12 如何停止从服务复制功能
stop slave;