MySQL主从环境搭建

本文最后更新于2016年9月18日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

工作需要,学习需要。

正文:

MySQL的主从架构:

由一个MySQL实例作为主库,接受读写请求,另外一个或多个MySQL实例通过MySQL的复制机制,将主库的数据同步到从库,从库会设置只读,防止主从数据不一致。

主从架构的好处:
  1. 如果主服务器出现问题,可以快速切换到从服务器提供服务;
  2. 可以在从服务器上执行查询,降低主服务器的压力;
  3. 可以在从服务器上执行备份,以避免备份期间影响主服务器的性能。
主从架构的局限:

由于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> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slave_ip' IDENTIFIED BY 'password';
mysql> flush privileges;
使用刚创建的 repl 账户在Slave所在主机上登录Master,测试用于复制的账户是否可以连接上
mysql -h master_ip -u repl -p
3 记录同步点

mysql> FLUSH TABLES WITH READ LOCK; //若要同步的数据库中已经有数据,还需要先用该语句锁定数据库
mysql> SHOW MASTER STATUS; //查看Master状态,记录File和Position两个信息
4

将主库数据做逻辑备份或物理备份

mysql> flush tables with read lock;

shell> mysqldump -uroot -p --all-databases --master-data > backup.sql

shell> scp -C backup.sql user@slave_ip:/tmp/

mysql> unlock tables;
5 在从库上恢复数据

shell> mysql -uroot -p </tmp/backup.sql
shell> rm -rf /tmp/backup.sql
6

以root身份登录从库,并在从库上设置主库的相关信息(host、port、user等等)

mysql> CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;

mysql> START SLAVE; //启动主从复制

mysql> SHOW SLAVE STATUS\G //查看slave状态
7 一切顺利的话,到这里,Master上的操作会被同步到Slave上。

在主库创建test_tb表,模拟数据库新增数据
mysql> create table test_tb(id int,name varchar(30));

在从库查看是否存在test_tb表
mysql> show tables;
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2843.html

10 thoughts on “MySQL主从环境搭建”

  1. 在从库(Slave)上暂停复制操作:
    `mysql> STOP SLAVE;`

    当复制操作停止后,
    ① 从库上的 IO_THREAD 线程停止从主库上读取 binlog 写入本地的 relaylog ;
    ② 从库上的 SQL_THREAD 线程也停止从 relaylog 中读取并在本地执行。

    你可以通过下面的命令分别暂停 IO_THREAD 或 SQL_THREAD 线程:
    `mysql> STOP SLAVE IO_THREAD;
    mysql> STOP SLAVE SQL_THREAD;
    `
    在从库(Slave)上启动复制操作:
    `mysql> START SLAVE;`

    可以单独启动 IO_THREAD 或 SQL_THREAD 线程:
    `mysql> START SLAVE IO_THREAD;
    mysql> START SLAVE SQL_THREAD;
    `
    https://dev.mysql.com/doc/refman/5.7/en/replication-administration-pausing.html

  2. 集群脑裂问题分析
    https://blog.csdn.net/cweeyii/article/details/72354363
    `
    1.什么是集群脑裂
    集群的脑裂通常是发生在集群中部分节点之间不可达而引起的(或者因为节点请求压力较大,导致其他节点与该节点的心跳检测不可用)。当上述情况发生时,不同分裂的小集群会自主的选择出master节点,造成原本的集群会同时存在多个master节点。
    `

    ElasticSearch集群脑裂,怎么办?
    https://mp.weixin.qq.com/s/PQ9ueCgVu29zJ8OgagjXnw

    MySQL集群节点宕机,数据库脑裂!如何排障?
    https://mp.weixin.qq.com/s/tp8yhCSmOyeJr2QQDfo0yQ

发表评论

电子邮件地址不会被公开。 必填项已用*标注