中小型规模网站集群架构:MySQL主从复制
: Ago linux运维群:https://hankbook.cn
前言:
MySQL的数据是如此的重要,不做个备份吗?
部署
1.快速部署方案
1.安装好要配置从库的数据库,配置好log-bin和server-id
2.无需配置主库my.cnf文件,主库的log-bin和server-id参数默认就是配置好的
3.登录主库增加用于从库连接主库同步的账号例如:rep,并授权replication slave同步权限
4.使用半页mysqldump带--master-data=1备份的全备数据恢复到从库,
5.在从库执行change master to ...语句
6.从库开启同步开关,start slave
7.从库 show slave status\G,检查同步状态,并在主库进行更新测试。
主库
1.开启节点
[shell]:echo -e "log-bin=mysql-bin\nserver-id=1">>/etc/my.cnf
[shell]:/etc/init.d/mysqld restart
2.添加从库用户
[mysql]:grant replication slave on *.* to 'rep'@'172.16.1.%' identified by '123456';
[mysql]:flush privileges;
3.锁库
[mysql]:flush table with read lock;
[mysql]:show master status;
show variables like "%timeout%"; 查看锁的超时时间interactive和wait
4.备份
[shell]:mysqldump -uroot -p123456 -A -B --events|gzip>/opt/rep.sql.gz
5.开锁
[mysql]:unlock tables;
从库
小坑:因为yum仓库的mysql是克隆关系,所以加上此命令
mv /application/mysql/data/auto.cnf{,.bak}
就跟克隆虚拟机效果一样
1.增加节点
[shell]:echo -e "log-bin=mysql-bin\nserver-id=2">>/etc/my.cnf
[shell]:/etc/init.d/mysqld restart
2.导入数据
把主库的给scp到从库上,并进行数据
[shell]:zcat rep.sql.gz |mysql -uroot -p123456
3.配置从库数据
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1471 | | | |
+------------------+----------+--------------+------------------+-------------------+
[mysql]:CHANGE MASTER TO
MASTER_HOST='172.16.1.51',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1471;
4.开启从库
start slave;
5.查看状态
[mysql]:show slave status\G
#出现两个yes就好了
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
步骤回顾
步骤回顾:
1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登录。
2.配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和主库及其他从库一样,一般不开启从库log-bin功能。注意配置参数后要重启生效。
3.登录主库增加用于从库连接主库同步的账号:例如rep,并授权replication slave同步的权限。
4.登录主库,整库锁表flush table with read lock(窗口关闭后即失效,超时参数倒了也失效。)然后show master status 查看binlog的位置状态。
5.新开窗口,linux命令行备份或导出原有的数据库数据,并拷贝岛从库所在的服务器目录。
如果数据量很大,并且允许停机。可以停机打包,而不用mysqldump
6.解锁主库:unlock tables;
7.把主库导出的原有数据恢复岛从库。
8.根据主库的show master status查看binlog的位置状态,在从库执行change master to ...语句
9.从库开启同步开关,start slave。
10.从库show slave status、G,检查同步状态,并在主库进行更新测试。