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

你可能感兴趣的:(mysql)