天下風雲出我輩
一入江湖歲月催

Mysql主从复制

使用环境:

服务器 服务器系统 IP地址 所需服务
MySQL主服务器 centos7 192.168.1.235 chrony,mysql5.7
MySQL从服务器 centos7 192.168.1.234 chrony,mysql5.7

一、为什么要做主从复制?

  1. 做数据的热备:作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
  2. 架构的扩展:做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
  3. 读写分离:使数据库能支撑更大的并发。

二、主从复制的原理

  1. 数据库有个bin-log二进制文件,记录了所有sql语句。
  2. 我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
  3. 让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。

具体需要三个线程来操作:
1.binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
2.从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。

3.从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。

步骤一:主库db的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库
步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.
步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db.

三、安装配置Mysql

1、mysql的安装见:mysql安装与常用命令

2、使用chrony时间同步服务

yum install -y chrony #安装软件

vim /etc/chrony.conf #编辑配置文件使用阿里云NTP服务器
server ntp1.aliyun.com iburst

systemctl enable chronyd && systemctl start chronyd 

chronyc sources -v #查看同步信息

3、配置192.168.1.235(master)

3.1 编辑配置文件

vim /etc/my.cnf

server-id = 35 //设置主从服务器身份唯一标识
log-bin=master-bin //开启二进制日志
log-slave-updates=true //开启主从功能

systemctl restart mysqld.service    #重启服务

3.2 创建同步用户并授权

#授权从服务器myslave在192.168.1网段登陆
mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.1.%' IDENTIFIED BY 'Test/2018';

FLUSH PRIVILEGES;     //刷新状态
show master status;  //查看主服务器状态
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      154 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+

4、配置192.168.1.234(slave)

4.1 编辑配置文件

vim /etc/my.cnf

server-id=34                   #//设置唯一身份标识
relay-log=relay-log-bin      #//打开中继日志功能
relay-log-index=slave-relay-bin.index        #//定义relay-log的位置和名称

systemctl restart mysqld.service        #重启服务

4.2  进入数据库配置同步

mysql> change master to master_host='192.168.1.235',master_user='myslave',master_password='Test/2018',
master_log_file='master-bin.000001',master_log_pos=154;

#启动slave
mysql> start slave;

mysql>  show slave status\G;     //查看状态,以下都为yes表示同步成功

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

5、验证主从结果

当选择在主MySQL服务器中创建数据,从服务器中也会同步更新数据文件。

主:

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

从:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)

 

赞(5) 打赏
未经允许不得转载:Anonym0x1 » Mysql主从复制

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏