[关闭]
@yanglt7 2018-10-21T15:56:59.000000Z 字数 6400 阅读 743

【Web 集群实战】17_MySQL 主从复制

Web集群实战


1. 主从复制原理

2. 主从复制数据库环境准备

  1. [root@ylt001 ~]# ss -lnt|grep 330
  2. LISTEN 0 50 *:3307 *:*
  3. LISTEN 0 50 *:3308 *:*
  4. LISTEN 0 50 *:3306 *:*

3. 在主库上执行操作配置

1) 设置 server-id 值并开启 binlog 功能参数

  1. [root@ylt001 ~]# cd /data/3306
  2. [root@ylt001 3306]# vi my.cnf
  3. [mysqld]
  4. server-id = 1
  5. log-bin = /data/3306/mysql-bin
  6. [root@ylt001 3306]# egrep "server-id|log-bin" my.cnf
  7. server-id = 1
  8. log-bin=/data/3306/mysql-bin
  9. [root@ylt001 3306]# /data/3306/mysql restart
  10. Restarting MySQL...
  11. Stopping MySQL...
  12. Starting MySQL...
  13. [root@ylt001 3306]# mysql -uroot -ppassword -S /data/3306/mysql.sock
  14. mysql> show variables like 'server_id';
  15. +---------------+-------+
  16. | Variable_name | Value |
  17. +---------------+-------+
  18. | server_id | 1 |
  19. +---------------+-------+
  20. 1 row in set (0.00 sec)
  21. mysql> show variables like 'log_bin';
  22. +---------------+-------+
  23. | Variable_name | Value |
  24. +---------------+-------+
  25. | log_bin | ON |
  26. +---------------+-------+
  27. 1 row in set (0.00 sec)
  28. mysql> quit
  29. Bye

2)在主库上建立用于主从复制的账号

  1. [root@ylt001 3306]# mysql -uroot -ppassword -S /data/3306/mysql.sock
  2. mysql> grant replication slave on *.* to 'rep'@'192.168.2.%' identified by 'password';
  3. Query OK, 0 rows affected (0.00 sec)
  4. mysql> flush privileges;
  5. Query OK, 0 rows affected (0.00 sec)
  6. mysql> select user,host from mysql.user;
  7. +------+-------------+
  8. | user | host |
  9. +------+-------------+
  10. | root | 127.0.0.1 |
  11. | rep | 192.168.2.% |
  12. | root | localhost |
  13. +------+-------------+
  14. 3 rows in set (0.00 sec)
  15. mysql> select user,host from mysql.user where user='rep';
  16. +------+-------------+
  17. | user | host |
  18. +------+-------------+
  19. | rep | 192.168.2.% |
  20. +------+-------------+
  21. 1 row in set (0.00 sec)
  22. mysql> show grants for rep@'192.168.2.%';
  23. +--------------------------------------------------------------------------------------------------------------------------+
  24. | Grants for rep@192.168.2.% |
  25. +--------------------------------------------------------------------------------------------------------------------------+
  26. | GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.2.%' IDENTIFIED BY PASSWORD '*91F687E9EA9F80F26008D0CA416D9C233B14C9E3' |
  27. +--------------------------------------------------------------------------------------------------------------------------+
  28. 1 row in set (0.00 sec)

3)实现主数据库锁表只读

  1. mysql> flush table with read lock;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> show variables like '%timeout%';
  4. +----------------------------+----------+
  5. | Variable_name | Value |
  6. +----------------------------+----------+
  7. ...
  8. | interactive_timeout | 28800 |
  9. ...
  10. | wait_timeout | 28800 |
  11. +----------------------------+----------+
  12. 10 rows in set (0.00 sec)
  13. mysql> show master status;
  14. +------------------+----------+--------------+------------------+
  15. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  16. +------------------+----------+--------------+------------------+
  17. | mysql-bin.000001 | 664 | | |
  18. +------------------+----------+--------------+------------------+
  19. 1 row in set (0.00 sec)
  20. [root@ylt001 3306]# mkdir -p /server/backup/
  21. [root@ylt001 3306]# mysqldump -uroot -ppassword -S /data/3306/mysql.sock --events -A -B |gzip >/server/backup/mysql_bak.$(date +%F).sql.gz
  22. [root@ylt001 3306]# ls -l /server/backup/mysql_bak.$(date +%F).sql.gz
  23. -rw-r--r-- 1 root root 155029 Sep 30 21:03 /server/backup/mysql_bak.2018-09-30.sql.gz
  24. [root@ylt001 3306]# mysql -uroot -ppassword -S /data/3306/mysql.sock -e"show master status"
  25. +------------------+----------+--------------+------------------+
  26. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  27. +------------------+----------+--------------+------------------+
  28. | mysql-bin.000001 | 664 | | |
  29. +------------------+----------+--------------+------------------+
  1. mysql> unlock tables;
  2. Query OK, 0 rows affected (0.00 sec)

4) 把主库导出的 MySQL 数据迁移到从库

4. 在 MySQL 从库上执行的操作过程

1) 设置 server-id 值并关闭 binlog 功能参数

  1. [root@ylt001 ~]# cd /data/3307
  2. [root@ylt001 3307]# vi my.cnf
  3. [mysqld]
  4. server-id = 3
  5. #log-bin = /data/3307/mysql-bin
  6. [root@ylt001 3307]# egrep "server-id|log-bin" my.cnf
  7. server-id = 3
  8. #log-bin=/data/3307/mysql-bin
  9. [root@ylt001 3307]# /data/3307/mysql restart
  10. Restarting MySQL...
  11. Stopping MySQL...
  12. Starting MySQL...
  13. [root@ylt001 3307]# mysql -uroot -ppassword -S /data/3307/mysql.sock
  14. mysql> show variables like 'server_id';
  15. +---------------+-------+
  16. | Variable_name | Value |
  17. +---------------+-------+
  18. | server_id | 3 |
  19. +---------------+-------+
  20. 1 row in set (0.00 sec)
  21. mysql> show variables like 'log_bin';
  22. +---------------+-------+
  23. | Variable_name | Value |
  24. +---------------+-------+
  25. | log_bin | OFF |
  26. +---------------+-------+
  27. 1 row in set (0.00 sec)
  28. mysql> quit
  29. Bye

2)把从主库 mysqldump 导出的数据恢复到从库

  1. [root@ylt001 3306]# cd /server/backup/
  2. [root@ylt001 backup]# ll
  3. total 152
  4. -rw-r--r-- 1 root root 155029 Sep 30 21:03 mysql_bak.2018-09-30.sql.gz
  5. [root@ylt001 backup]# gzip -d mysql_bak.2018-09-30.sql.gz
  6. [root@ylt001 backup]# ll
  7. total 552
  8. -rw-r--r-- 1 root root 561654 Sep 30 21:03 mysql_bak.2018-09-30.sql
  9. [root@ylt001 backup]# mysql -uroot -ppassword -S /data/3307/mysql.sock <mysql_bak.2018-09-30.sql

3)登录 3307 从库,配置复制参数

  1. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3307/mysql.sock
  2. mysql> reset slave;
  3. Query OK, 0 rows affected (0.00 sec)
  4. mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.188', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=664;
  5. Query OK, 0 rows affected (0.01 sec)
  6. mysql> quit
  7. Bye
  8. [root@ylt001 data]# cat master.info
  9. 18
  10. mysql-bin.000001
  11. 664
  12. 192.168.2.188
  13. rep
  14. password
  15. 3306
  16. 60
  17. 0
  18. ...

5. 启动从库同步开关,测试主从复制配置情况

  1. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3307/mysql.sock -e"start slave;"
  2. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3307/mysql.sock -e"show slave status\G;"
  3. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3307/mysql.sock -e"show slave status\G;"|egrep "IO_Running|SQL_Running|_Behind_Master"
  4. Slave_IO_Running: Yes
  5. Slave_SQL_Running: Yes
  6. Seconds_Behind_Master: 0
  1. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3306/mysql.sock -e"create database ylt;"
  2. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3307/mysql.sock -e"show databases like 'ylt';"
  3. +----------------+
  4. | Database (ylt) |
  5. +----------------+
  6. | ylt |
  7. +----------------+
  8. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3306/mysql.sock -e"drop database ylt;"
  9. [root@ylt001 data]# mysql -uroot -ppassword -S /data/3307/mysql.sock -e"show databases like 'ylt';"
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注