MySQL 主从介绍
MySQL 主从又叫做 AB 负责; 也就是 A 和 B 两个机器做主从后, 在 A 上些数据, 另外一台 B 也能跟着些数据, 两者数据实时同步;
MySQL 主从是基于 binlog 的, 主上必须开启 binlog 才能进行主从;
应用场景: 备份使用, 只使用主机器, 从机器备份, 当主机器宕机, 切换从机器正常访问; 分流使用, 但从机器无法写数据;
步骤为: A 设置配置文件 - A 重启服务 - A 创建主从账号 - 锁定 A 的数据库写功能 - 备份 A 所有数据库 - B 设置配置文件 - B 重启服务 - 将 A 备份文件传到 B 机器上 - B 上创建与 A 一样的数据库并将数据恢复成一摸一样 - 关闭 B 的同步功能 - B 设置同步参数 - B 开启同步 - A 解锁写功能;
主 MySQL 配置
设置配置文件
vim /etc/my.cnf
增加
- server-id=2 // 增加 server-id 为 2
- log_bin=test01 // 设置 log_bin 名为 test01
- /etc/init.d/mysqld restart // 重启 mysql 服务
创建 test001 数据库
其实可以省略此步骤, 意思就是新建一个测试数据库 test001, 将 mysql 的内容复制到 test001 上
- mysqldump -uroot -p123456 mysql> /tmp/mysql.sql // 备份 mysql 数据库
- mysql -uroot -p123456 -e "create database test001" // 创建 test001 数据库
- mysql -uroot -p123456 test001 </tmp/mysql.sql // 将刚刚备份的 mysql 数据库的内容恢复到新建的 test001 上
创建主从 mysql 账号
- mysql -uroot -p123456 // 登录 mysql, 在 mysql 设置增加用户权限
- grant replication slave on *.* to repl@192.168.188.3 identified by 123456; // 创建用户 repl 限定为从 ip 登录, 限定权限
锁定数据库写功能
在登录 mysql 中使用
- flush tables with read lock; // 锁定数据库服务暂时无法写;
- show master status; // 查看主服务的位置与 id
将所有数据库备份
- mysqldump -uroot -p123456 zrlog> /tmp/zrlog.sql // 将 zrlog 数据库备份
- mysqldump -uroot -p123456 mysql> /tmp/mysql.sql // 将 mysql 数据库备份
- mysqldump -uroot -p123456 test001> /tmp/test001.sql // 将 test001 数据库备份
- mysqldump -uroot -p123456 db1> /tmp/db1.sql // 将 db1 数据库备份
从 MySQL 配置
设置配置文件
vim /etc/my.cnf
增加
- server-id=3 // 只增加一行 server-id
- /etc/init.d/mysqld restart // 重启 mysql 服务
scp 192.168.188.2:/tmp/*.sql /tmp$/ 将主服务器上的备份传递到从机器的相应目录
mysql -uroot -p123456 // 登录 mysql
创建与主服务器相应数据库
- create database test001; // 这里必须对应主服务器的数据库, A 上有的 B 也必须创建;
- create database db1;
- create database zrlog;
恢复备份数据恢复到相应数据库下
- mysql -uroot -p123456 db1 </tmp/db1.sql
- mysql -uroot -p123456 test001 < /tmp/test001.sql
- mysql -uroot -p123456 zrlog < /tmp/zrlog.sql
关闭从服务的同步
stop slave;
设置同步参数
change master to master_host=192.168.188.2, master_user=repl, master_password=123456, master_log_file=test01.000001, master_log_pos=664383;
注意: 这里的 master_log_file 与 master_log_pos 后面参数, 分别是主服务器 A 的 show master status; 命令
- mysql> show master status;
- +---------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +---------------+----------+--------------+------------------+-------------------+
- | test01.000001 | 664383 | | | |
- +---------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
开启从服务的同步
start slave;
解锁主服务的写功能
登录主服务器 A 的 mysql
unlock tables; // 解锁主服务器的写功能
检测
- show slave status\G // 只要看 Slave_IO_Running 与 Slave_SQL_Running 是否正常
- drop database test001; // 主上删除 test001 数据库;
- show databases; // 从上查看数据库列表, 发现 test001 数据库消失;
注意: 如果在从服务器上操作删除了东西, 那么主从配置就自动断开; 需要两方数据一致后, 关闭同步功能, 重新指定同步参数, 再打开同步才行;
其他配置
vim /etc/my.cnf
主服务器 (主上配置后, 从不用配置)
- binlog-do-db= // 仅同步指定数据库
- binlog-ignore-db= // 忽略指定的数据库
从服务器 (从配置后, 主不用配置)
- replicate_do_db= // 仅同步指定数据库
- replicate_ignore_db= // 忽略指定的数据库
- replicate_wild_do_table= // 如 test.%, 支持通配符 %, 同步指定更新某表
- replicate_wild_ignore_table= // 忽略更新某表
来源: http://www.bubuko.com/infodetail-2547798.html