MySQL主从复制

MySQL主从复制

主库

  • 开启主库binlog和server_id
vim /etc/my.cnf
[mysqld]
log-bin=/var/lib/mysql/mysql-bin
server_id=1
systemctl restart mysql
  • 添加同步账号
mysql> grant replication slave on *.* to "rep"@"172.16.100.%" identified by "000000";
mysql> show master status;   
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |     1077 |              |                  |
+------------------+----------+--------------+------------------+
  • 数据库完整打包备份拷贝至丛库
mysqldump -uroot -p -ABREx --master-data=2| gzip > master.sql.gz
scp master.sql.gz 172.16.100.20:/root

丛库

  • 设置server_id
vim /etc/my.cnf
server_id=2
  • 导入主库数据库
gzip -d master.sql.gz
mysql -uroot -p < master.sql
  • 生成master.info文件
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=1077, MASTER_HOST='172.16.100.10', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='000000';
  • 开启slave并检查
mysql> start slave;
mysql> show slave status\G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mysql> show processlist;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id | User        | Host      | db   | Command | Time | State                                                                       | Info             |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
|  8 | root        | localhost | NULL | Query   |    0 | NULL                                                                        | show processlist |
| 12 | system user |           | NULL | Connect |  363 | Waiting for master to send event                                            | NULL             |
| 13 | system user |           | NULL | Connect |  363 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+

这里可以写一个监控slave脚本

RES=mysql -uzabbix -pzabbix00 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
if [ "$RES" = " Yes, Yes," ]; then
echo 1
else
echo 0
fi
exit
上一篇:Percona监控MySQL数据库


下一篇:链表中倒数第k个结点 【微软面试100题 第十三题】