MySQL主从架构配置

1. 准备

我这里准备了三台机器(系统版本:CentOS6.5)准备搭建MySQL主从架构,分别是master(192.168.21.200)和slave1(192.168.21.201)和slave2(192.168.21.202)

其中master为主节点,slave1和slave2为从节点

1.保证三台机器上安装了相同版本的mysql版本,我这是mysql5.7.21版本
2.保证三台机器的防火墙已经关闭,防止因为防火墙原因导致访问失败
2. 主节点配置(master)

对于CentOS6.5,mysql的配置文件在/etc/my.cnf

编辑/etc/my.cnf,添加如下内容

[yangqi@master ~]$ sudo vi /etc/my.cnf

找到[mysqld]标签,在下面添加如下内容

log_bin:打开MySQL日志,格式为二进制

server-id:让主服务器有唯一ID号,一般取IP地址的最后一个网段

binlog-do-db要进行同步的数据库(非必须),如果没有指定,则默认同步所有的数据库

binlog-ignore-db要忽略的同步的数据库(非必须)

[mysqld]
log_bin=mysql_bin
server-id=200

binlog-do-db=test
binlog-do-db=sales_source

binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
3. 从节点配置(slave1/slave2)

编辑/etc/my.cnf,添加如下内容

[yangqi@slave1 ~]$ sudo vi /etc/my.cnf
[yangqi@slave2 ~]$ sudo vi /etc/my.cnf

找到[mysqld]标签,在下面添加如下内容

log_bin二进制文件前缀名称

server-id当前节点一个全局的ID号

read-only只读模式

relay-log同步二进制文件前缀名称

slave1配置

[mysqld]
log_bin=mysql_bin
server-id=201
read-only=1
relay-log=mysql_relay_bin

slave2配置

[mysqld]
log_bin=mysql_bin
server-id=202
read-only=1
relay-log=mysql_relay_bin
4. 进入master节点

使用root账户连接master节点的mysql服务,并登录,查看其中的数据库

[yangqi@master ~]$ mysql -uroot -pxiaoer

可以看到,我们要进行同步的数据库是sales_source和test这两个数据库

在master的数据库中建立一个备份用户,每个slave使用标准的MySQL用户和密码连接master,并对其进行授权

mysql> create user 'xiaoer'@'%' identified by 'xiaoer';
mysql> grant replication slave,replication client on *.* to 'xiaoer'@'%' identified by 'xiaoer';

将master节点的mysql处于只读状态,不可以对其中的数据进行更改

mysql> flush tables with read lock;

此时重新打开一个连接窗口,对其中我们要进行同步的数据库进行备份

[yangqi@master ~]$ mysqldump -uroot -pxiaoer test > /tmp/test.sql
[yangqi@master ~]$ mysqldump -uroot -pxiaoer sales_source > /tmp/sales_source.sql
5. 进入slave1/slave2节点

在slave1和slave2中将刚才导出的备份文件重新加载,保证master上的数据库和slave1以及slave2上的数据库保持一致

[yangqi@slave1 ~]$ scp master:/tmp/*.sql /tmp/
[yangqi@slave2 ~]$ scp master:/tmp/*.sql /tmp/

此时登录到mysql中,创建数据库

slave1

mysql> create database test;
mysql> create database sales_source;

# 然后将刚才备份的数据进行导入
[yangqi@slave1 ~]$ mysql -uroot -pxiaoer test < /tmp/test.sql
[yangqi@slave1 ~]$ mysql -uroot -pxiaoer sales_source < /tmp/sales_source.sql

slave2

mysql> create database test;
mysql> create database sales_source;

# 然后将刚才备份的数据进行导入
[yangqi@slave2 ~]$ mysql -uroot -pxiaoer test < /tmp/test.sql
[yangqi@slave2 ~]$ mysql -uroot -pxiaoer sales_source < /tmp/sales_source.sql

登录mysql

[yangqi@slave1 ~]$ mysql -uroot -pxiaoer
[yangqi@slave2 ~]$ mysql -uroot -pxiaoer

进入主节点,查看master的运行状态

[yangqi@master ~]$ mysql -uroot -pxiaoer
msyql> show master status;

记住以上的一些信息,待会要用到

进入从节点,分别在slave1和slave2上启动从服务器复制线程

在执行之前一定要保证slave处于关闭状态,stop slave;

mysql> change master to master_host='192.168.21.200', master_user='xiaoer', master_password='xiaoer', master_log_file='xiaoer_yangqi.000006', master_log_pos=154;

之后在从节点上启动slave

mysql> start slave;

使用show slave status\G;查看连接信息

此时已经连接成功,可以看一下从节点上面的数据库,然后接触主节点上的只读状态unlock tables;

6. 简单测试

在master中的sales_source数据库中有一个表product,我们给其插入一条数据,在slave上查看是否已经同步

master

[yangqi@master ~]$ mysql -uroot -pxiaoer
mysql> insert into product values(4,"abc","nihao");
mysql> select * from product;

此时在slave1和slave2节点上进行测试,查看是否同步成功

[yangqi@slave1 ~]$ mysql -uroot -pxiaoer
mysql> use sales_source;
mysql> select * from product;

[yangqi@slave2 ~]$ mysql -uroot -pxiaoer
mysql> use sales_source;
mysql> select * from product;