本文章: 参考 跟老男孩学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