MySQL数据库高级 主从复制
主从复制
复制的基本原理
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
复制的最大问题
因为发生多次 IO,存在延时问题
一主一从常见配置
-
mysql 版本一致且后台以服务运行
-
主从都配置在[mysqld]结点下,都是小写。
主机修改 my.ini (windows)配置文件
# 主服务器唯一 ID server-id=1 # 启用二进制日志 log-bin=自己本地的路径/data/mysqlbin # 启用错误日志 [非必须] log-err=自己本地的路径/data/mysqlerr # 根目录 [非必须] basedir=自己本地的路径 # 临时目录 [非必须] tmpdir=自己本地的路径 # 数据目录 [非必须] tmpdir=自己本地的路径/data # 设置不要复制的数据库 [非必须] binlog-ignore-db=mysql # 设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字 设置 logbin 格式 [非必须] binlog_format=STATEMENT(默认)
-
从机配置文件修改 my.cnf 的[mysqld]节点
# 从机服务 id # 注意 my.cnf 中有 server-id = 1 server-id = 2 # 设置中继日志 relay-log=mysql-relay
-
因修改过配置文件,请主机+从机都重启后台 mysql 服务
service iptables stop
-
主机从机都关闭防火墙、安全工具(腾讯管家等)
-
在 Windows 主机上建立帐户并授权 slave
-- 创建用户,并授权 GRANT REPLICATION SLAVE ON *.* TO 'silince'@'从机器数据库 IP' IDENTIFIED BY '123456'; -- 刷新 flush privileges;
-
查询 master 的状态,并记录下 File 和 Position 的值
-- 查询 master 的状态;记录下File和Position的值 show master status;
-
在 Linux 从机上配置需要复制的主机
-- 查询 master 的状态 CHANGE MASTER TO MASTER_HOST='主机 IP',MASTER_USER='silince',MASTER_PASSWORD='创建的密码', MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;
-
启动从服务器复制功能
start slave; show slave status\G; -- 主从配置成功 显示 Slave_IO_Running: Yes Slave_SQL_Running: Yes
-
主机新建库、新建表、insert记录,从机复制
-
如何停止从服务复制功能
stop slave;
既已览卷至此,何不品评一二: