=Start=
缘由:
工作需要,学习需要。
正文:
MySQL的主从架构:
由一个MySQL实例作为主库,接受读写请求,另外一个或多个MySQL实例通过MySQL的复制机制,将主库的数据同步到从库,从库会设置只读,防止主从数据不一致。
主从架构的好处:
如果主服务器出现问题,可以快速切换到从服务器提供服务;
可以在从服务器上执行查询,降低主服务器的压力;
可以在从服务器上执行备份,以避免备份期间影响主服务器的性能。
主从架构的局限:
由于MySQL实现的是异步复制,所以主从服务器之间的数据存在一定差异(延迟),对实时性要求高的数据仍然需要从主服务器上获得。
主从搭建步骤:
Step
主库(Master)
从库(Slave)
1
修改主库my.cnf配置文件,然后 需要重启生效
[mysqld]
#作为主库
#启动二进制文件(*)
log-bin=mysql-bin
#服务器ID(*)
server-id=1
#需要备份的数据库,多个写多行
binlog-do-db=orders
#不需要备份的数据库,多个写多行
binlog-ignore-db=mysql
修改从库my.cnf配置文件,然后 需要重启生效
[mysqld]
#作为从库(如果有多个从库,在各自的my.cnf中的server-id需要各不相同)
server-id=2
replicate-do-db=bash #只复制某个库,多个写多行
replicate-ignore-db=mysql #不复制某个库,多个写多行
replicate-ignore-db=test
replicate-ignore-db=information_schema
2 创建从库用于连接主库的账号(repl)
mysql> GRANTREPLICATIONSLAVEON *.* TO 'repl'@'slave_ip' IDENTIFIEDBY 'password';
mysql> flushprivileges;
使用刚创建的 repl 账户在Slave所在主机上登录Master,测试用于复制的账户是否可以连接上
mysql -h master_ip -u repl -p
3 记录同步点
mysql> FLUSHTABLESWITHREADLOCK; //若要同步的数据库中已经有数据,还需要先用该语句锁定数据库
mysql> SHOWMASTERSTATUS; //查看Master状态,记录File和Position两个信息
4
将主库数据做逻辑备份或物理备份
mysql> flushtableswithreadlock;
shell> mysqldump -uroot -p --all-databases --master-data > backup.sql
shell> scp -C backup.sqluser@slave_ip:/tmp/
mysql> unlocktables;
5 在从库上恢复数据
shell> mysql -uroot -p </tmp/backup.sql
shell> rm -rf /tmp/backup.sql
6
以root身份登录从库,并在从库上设置主库的相关信息(host、port、user等等)
mysql> CHANGEMASTERTO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
mysql> STARTSLAVE; //启动主从复制
mysql> SHOWSLAVESTATUS\G //查看slave状态
7 一切顺利的话,到这里,Master上的操作会被同步到Slave上。
在主库创建test_tb表,模拟数据库新增数据
mysql> create table test_tb(id int,name varchar(30)); 在从库查看是否存在test_tb表
mysql> show tables;