深入理解主从架构下的MySQL数据库

发表时间: 2018-11-25 21:54

前言:

MYSQL主从同步是目前使用最多的数据库架构之一,主从同步使得数据可以自动的把数据从一个数据库服务器复制到其他服务器上,在复制数据时,这一个服务器就叫做主服务器(master),其余的服务器充当从服务器(slave)。

这样的好处是使得在生产环境上,开发人员或者运维人员在查询数据库时候可以在从库上面操作,不影响主数据库的增删改查等功能.因为程序本身之是对主库在做操作的,从库起到数据备份的同时,又方便了运维人员查询问题。


正文:

前面说了主从的好处,下面我们正式讲下主从数据库同步的实现.

我这里用到的是两台虚拟主机,均安装的是centos7 64位的系统,安装的mysql为5.5.50版本。

说明:

  • 这里对于mysql的安装过程省略,因为linux系统安装数据库很简单,百度一大堆。
  • MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此是使Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定比Slave版本高

1.所需环境

主服务器: master操作系统:centos 7 64位

IP:192.168.119.253

MySQL版本:5.5.50-MariaDB

从服务器: slave操作系统:centos 7 64位

IP:192.168.119.252

MySQL版本:5.5.50-MariaDB

2.创建数据库

分别登录master机和slave机的mysql:

mysql –u root –p

第二步:创建数据库

create database repl;

3.配置数据库

master机和slave机的相关配置

第一步:

修改master机器中mysql配置文件my.cnf,该文件在/etc目录下

在[mysqld]配置段添加如下字段

server-id=1

log-bin=mysql-bin

log-slave-updates=1

binlog-do-db=repl #需要同步的数据库,如果没有本行表示同步所有的数据库

binlog-ignore-db=mysql #被忽略的数据

第二步:

在master机上为slave机添加一同步帐号

MariaDB[(none)]>grant replication slave on *.* to 'repl'@'192.168.119.252' identified by '123456';

MariaDB[(none)]>flush privileges;

如下图所示:

重启master机的mysql服务:

service mysqld restart

如下图:

用show master status 命令看日志情况

MariaDB[(none)]>show master status;

如下图所示:

通过该命令获得File和Position,在下面slave中有用 。

说明:

基准这里的“mysql-bin.000001”和“245”,在下面 “(3)设置Slave复制”的配置中会用到。

2、修改slave机中mysql配置文件

第一步:

修改slave机器中mysql配置文件my.cnf,该文件在/etc目录下

同样在[mysqld]字段下添加如下内容

server-id=2log-bin= mysql-binrelay-log= mysql-relay-binread-only=1log-slave-updates=1replicate-do-db=repl #要同步的数据库,不写本行表示同步所有数据库

第二步:

重启slave机的mysql:

service mysqld restart

第三步:

在slave机上验证对主机连接

命令如下:

 mysql -h192.168.119.253 -urepl -p123456 MariaDB[(none)]>show grants for repl@192.168.119.252;

如下图所示:

第四步:

设置Slave复制:

CHANGE MASTER TOMASTER_HOST='192.168.119.253',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=245,MASTER_CONNECT_RETRY=10;

第五步:

启动Slave

运行SHOW SLAVE STATUS查看输出结果:

主要查看Slave_IO_Running和Slave_SQL_Running 两列是否都为YES

4.测试主从服务器数据是否能同步

第一步:

在主服务器上面新建一个表,必须在已有的repl数据库空间下:

mysql> use replDatabase changedmysql> create table test(id int,name char(10));Query OK, 0 rows affected (0.00 sec)mysql> insert into test values(1,'zaq');Query OK, 1 row affected (0.00 sec)mysql> insert into test values(1,'xsw');Query OK, 1 row affected (0.00 sec)mysql> select * from test;+------+------+| id | name |+-------+------+| 1 | zaq || 1 | xsw |+-------+------+2 rows in set (0.00 sec)

第二步:

从服务器查看是否同步过来

mysql> use repl;Database changedmysql> select * from test;+------+------+| id | name |+------+------+| 1 | zaq || 1 | xsw |+------+------+2 rows in set (0.00 sec)

说明已经配置成功。


关注➕私信回复(学习)获取最新技术干货,每天都有更新。