MySQL主从架构配置
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;