mysql 多实例 主从复制实战记录

本文章: 参考 跟老男孩学linux-web集群实战  第九章

  大环境:
    contos:Linux localhost 2.6.32-754.3.5.el6.x86_64 #1 SMP Tue Aug 14 20:46:41 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
mysql: mysql-5.5.32
mysql 一机多实例3个 搭建环境: 跟老男孩学linux-web集群实战 第九章
1. 环境的准备
a. contos上 mysql 一机多实例3个
2. 定义主从复制需要的服务器角色
a. master 3306、slave1 3307、slave2 3308
3. 在主库 master 上操作
a. 设置 server-id 值并开启 binlog 功能, my.cnf 配置文件上
i. [root@localhost ~]# egrep 'server-id|log-bin' /data/3306/my.cnf
log-bin = /data/3306/mysql-bin
server-id = 1
b. 登录mysql 检查参数更改情况
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.01 sec)

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
c. 在主库上 建立用于 主从复制的账号
grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'oldboy123'
d. 检测主库创建的 rep 复制账号命令和结果如下
e. 实现对主数据库锁表只读
flush table with read lock;
f. 锁表后,查看主库的状态
show master status;
g. 锁表后,单开一个 ssh ,导出数据库的所有数据
mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock --events -A -B | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz | 参数有 gzip 不太好用
mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock --events -A -B > /server/backup/mysql_bak.$(date +%F).sql 这个ok


记得再次检查,master 主库信息状态
mysql -u root -poldboy123 -S /data/3306/mysql.sock -e "show master status"
h. 导出数据后,解锁主库,恢复可写状态
unlock tables;
4.从库操作
1. 把主库导出的 mysql 数据迁移到 从库
mysql -uroot -poldboy123 -S /data/3308/mysql.sock < mysql_bak.2018-10-13.sql 这个ok

2. mysql 从库链接主库的 配置信息
CHANGE MASTER TO
MASTER_HOST='192.168.190.128',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='oldboy123',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=504;
整个配置 mysql 从库链接主库的信息操作过程如下:
mysql -uroot -poldboy123 -S /data/3307/mysql.sock << EOF
CHANGE MASTER TO
MASTER_HOST='192.168.190.128',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='oldboy123',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=504;
EOF

3. 启动从库同步开关, 并查看复制状态
mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "start slave;"
mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show slave status\G;"

主从复制是否成功,最关键的为下面的3个状态参数
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show slave status\G" | egrep "Slave_IO_Running| Slave_SQL_Running|Seconds_Behind_Master"
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0


参数解释:
1. Slave_IO_Running: Yes, 这个是I/O 线程的状态, I/O 线程负责从 从库到主库读取 binlog 日志,并写入从库的 中继日志, 状态为yes, 标识 I/O 线程工作正常
2. Slave_SQL_Running: Yes,这个是 sql 线程的状态, sql线程负责读取 中继日志(relay-log) 中的数据 并转换为sql语句应用到从数据库中, 状态为yes 表示 I/O 线程工作正常
3. Seconds_Behind_Master: 0, 这个是复制过程中 从库比主库 延迟的秒数, 这个参数很重要, 但企业里更精准的判断判断主从延迟的方法为: 在账户库写时间戳,然后从库读取时间戳, 和当前数据库时间进行比较,从而判断是否延迟

有管 show slave status 结果的说明,查看 mysql 手册
--------------------------------------------------------------------------------

5. 测试主从复制结果
在主库上写入数据,然后观察从库的数据状态
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "create database oldboy;"
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| performance_schema |
| test |
+--------------------+

[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "drop database oldboy;"
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+

6. 结果:
数据是同步的, mysql 主从同步 搞定

查看 master 状态
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "show master status;"
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 | 676 | | |
+------------------+----------+--------------+------------------+


😊 再次折腾一下午,结果还是满意的

之前 2台mac主机上, 搞过一次mysql主从, 理解不是很深刻, 链接: http://www.imshuai.cn/blog/213

今天在搞一遍,比之前深刻多了 :)
    2018-10-13

*文章为作者原创或网络转载
转载此文请于文首标明作者姓名,保持文章完整性,并请附上出处
未按照规范转载者,陈帅同学保留追究相应责任的权利
编程改变世界

干了这碗鸡汤