下面的引用是译自MySQL官网对 复制 的描述:
复制允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
MySQL的复制有如下优点:
- 扩展解决方案 - 在多个Slaves(从节点)中传播负载以提高性能。在此环境中,所有的写和更新在主服务器中进行。然后,读操作可以在一个或多个Slave节点中进行。此模型可以提高写的性能(因为主节点专用于更新),同时,在越来越多的从节点上提高读取速度。
- 数据安全 - 因为数据复制到了从节点,从节点可以暂停复制进程,才有可能在不影响主节点数据的情况下启动数据备份服务。
- 分析 - 在主节点上创建实时数据,从而在不影响主节点性能的情况下进行信息分析。
- 远程数据分布 - 如果分支机构希望使用主数据副本,则可以使用复制功能创建数据的本地副本以供其使用,而无需永久访问主数据。
1.主节点配置
在主节点中,必须开启二进制日志 (binlog) 并设定一个唯一的 Server ID。如果没有这样,需要配置好了后重启MySQL服务。
二进制日志记录了数据的变动情况,从节点 就是通过读取 主节点 的 二进制日志 来进行数据复制的,如果没有启动 二进制日志 ,复制将无法进行。
复制组中的每个服务器必须配置一个唯一的服务器ID,用于标识组中的不同服务器。
在my.cnf中新增如下配置:
[mysqld]
log-bin = mysql-bin
server-id = 1
2.从节点配置
在从节点上,必须指定唯一 Server ID。可以不为从节点开启二进制日志,如果开启了,也可以用于数据备份和恢复。
在my.cnf文件中配置如下:
[mysqld]
server-id = 2
3.创建复制用户
从节点需要有一个主节点上的用户来连接主节点,任何一个有 REPLICATION SLAVE 权限的用户都可以用户复制操作。登录到主节点,执行如下命令:
mysql> CREATE USER ‘repl’@’%’ IDENTIFIED BY ‘repl123’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’;
4.获取主节点BinLog坐标
从节点启动复制时需要获取到主节点binlog记录到的当前位置。
如果想在启动复制之前将主节点上已有的数据同步的从节点中,必须停止主节点上的处理语句,记录binlog日志位置,并备份需要所有数据。如果不停止主节点上的处理语句,会导致主从节点数据的不一致。
1.开启一个主节点上的连接,执行如下命令来阻塞所有的写操作
mysql> FLUSH TABLES WITH READ LOCK;
对于存储引擎为InnoDB的表,该命令也会阻塞 COMMIT 操作。当关闭了这个连接,对应的锁就会被释放。
2.在主节点上打开另外一个连接,执行如下命令来获取当前binlog位置。
mysql> SHOW MASTER STATUS;
结果如下图:
5.同步已有数据
1.备份主节点上的已有数据
mysql> mysqldump –all-databases –master-data > /tmp/dbdump.db
2.登录到从节点后执行备份的脚本
mysql> source /tmp/dbdump.db
数据同步完成后可关闭上一步中执行 FLUSH TABLES WITH READ LOCK; 命令的连接来释放锁。
6.启动复制
1.为从节点指定复制主节点
mysql> CHANGE MASTER TO MASTER_HOST=’master_host_name’, MASTER_USER=’repl’, MASTER_PASSWORD=’repl123’, MASTER_LOG_FILE=’recorded_log_file_name’, MASTER_LOG_POS=recorded_log_position;
其中 MASTER_LOG_FILE 和 MASTER_LOG_POS 即第4步中 SHOW MASTER STATUS 查询出的结果
2.启动复制线程
mysql> START SLAVE;
7.查看验证
查看复制状态
mysql> show slave status\G
出现如下结果时表示配置成功