1.MySQL 主从复制介绍
MySQL 数据库支持单向, 双向, 链式级联, 环状等不同业务场景的复制. 在复制过程中, 一台服务器充当主服务器(Master), 接收来自用户的内容更新, 而一个或多个其他的服务器充当从服务器(Slave), 接收来自主服务器 binlog 文件的日志内容, 解析出 SQL, 重新更新到从数据库, 使得主从服务器的数据达到一致.
如果设置了链式级联复制, 那么从服务器本身除了充当从服务器外, 也会同时充当其下面从服务器的主服务器, 链式级联复制类似 A->B->C 的复制形式. 在这里, 只介绍主 ->从形式的配置方案. 至于互为主从, 链式级联的以后有机会再讨论.
MySQL 的主从复制的主要场景有以下几个:
1)从服务器作为主服务器的实时数据备份
2)主从服务器实现读写分离(主写从读), 从服务器实现负载均衡
3)把多个从服务器根据业务重要性进行拆分访问(从服务器根据业务进行拆分)
2.MySQL 主从复制原理介绍
MySQL 的主从复制是一个异步的复制过程 (一般情况下感觉是实时的), 数据将从一个 MySQL 数据库(Master) 复制到另外一个 MySQL 数据库 (Slave), 在 Master 与 Slave 之间实现整个主从复制的过程是由三个线程参与完成的. 其中有两个线程(SQL 线程和 I/O 线程) 在 Slave 端, 另外一个线程 (I/O 线程) 在 Master 端.
要实现 MySQL 的主从复制, 首先必须打开 Master 端的 binlog 记录功能, 否则就无法实现. 因为整个复制过程实际上就是 Slave 端从 Master 端获取 binlog 日志, 然后再在 Slave 上以相同的顺序执行获取的 binlog 日志中所记录的各种 SQL 操作.
要打开 MySQL 的 binlog 记录功能, 可以通过在 MySQL 的配置文件 my.cnf 中的 mysqld 模块 ([mysqld] 标识后的参数部分)增加 "log-bin" 参数来实现.
3. 配置 MySQL 主从复制
本次实验的主从复制有单向的主从复制, 一个 Master 和一个 Slave. 两个 MySQL 服务器都按照之前的方法搭建好了, 并且也都开放了对应的端口.
(1)在主库 Master 的配置, 用 vim 打开 /etc/my.cnf 文件, 添加 server_id 和 log-bin 参数
- [mysqld]
- server_id = 52 # 不能和从数据库的一样
- log-bin = /usr/local/mysql/data/mysql-bin
保存退出之后重启数据库
/etc/init.d/mysqld restart
(2)登陆主数据库, 检查参数的情况, 看到 log-bin 已经打开.
(3)在主库上建立用于主从复制的账号, 检查账号建立成功.
- grant replication slave on *.* to 'rep'@'192.168.31.%' identified by 'pcm123456';
- flush privileges;
(4)主库上锁表, 然后备份数据库
flush table with read lock;
锁表后查看主库状态, 需要记录在案, 待会复制主库就是从这个位置开始的.
新开一个窗口, 用 mysqldump 进行数据的备份, 然后传输到从库上.
- mkdir -p /server/backup # 创建保存备份文件的文件夹
- mysqldump -uroot -p 'pcm123456' --events -A -B |gzip >/server/backup/mysql_bak.$(date +%F).sql.gz # 备份并压缩
- scp /server/backup/mysql_bak.2018-04-04.sql.gz root@192.168.31.53:/root/ # 用 scp 复制到从库上
备份结束后, 解锁主库, 恢复读写
(5)从库上操作, 设置 server-id 并关闭 binlog 功能.
从库上的 server-id 不能和主库的 serverid 一致, 这里我们设置主库的 server-id 为 53,binlog 的功能默认关闭的.
用 vim 编辑之后保存退出, 然后重启数据库.
/etc/init.d/mysqld restart
登陆 mysql 检查这两个参数, 确认无误
(6)从库上操作, 恢复主库导出的数据库到从库上
mysql -uroot -p <mysql_bak.2018-04-04.sql
(7)从库上操作, 配置复制参数.
- CHANGE MASTER TO
- MASTER_HOST='192.168.31.52',
- MASTER_PORT=3306,
- MASTER_USER='rep',
- MASTER_PASSWORD='pcm123456',
- MASTER_LOG_FILE='mysql-bin.000009',
- MASTER_LOG_POS=120;
这个操作实际上就是把用户, 密码以及主库的其他信息写入到从库的 master.info 文件去
(8)从库上开启同步开关, 测试主从复制配置情况
查看 slave 的状态, 注意查看 slave 的进程状态, 主库复制的延迟秒数
到这里, MySQL 的主从配置基本完成了. 下面我们在主库上增加一个数据库 pcm_test, 看看从库会不会一起更新. 证实了.
来源: http://www.bubuko.com/infodetail-2550561.html