mysql主从应⽤场景_MySQL主从复制与读写分离(原理适⽤
场景+实践操作)
MySQL主从复制与读写分离
⼀、前⾔
前⾯我们已经对MySQL数据库的安装、命令、备份、索引、事务以及存储引擎等各个⽅⾯有了初步的理解,⽽今天我们将从宏观的⾓度来理解什么是MySQL数据库的主从复制与读写分离。
⼆、场景描述
在实际的⽣产环境中,如果对MySQL数据库的读与写都在⼀台服务器上进⾏操作,⽆论是在安全性,⾼可⽤性、还是⾼并发性等诸多⽅⾯都是⽆法满⾜的;⽽这就需要对MySQL数据库进⾏主从复制与读写分离。
我们使⽤⼀个架构图来引出MySQL数据库主从复制的原理以及其作⽤,请看下图:
服务器作⽤:
MySQL主服务器:负责数据的写⼊;
MySQL从服务器:同步主服务器的数据并进⾏数据的轮循读取;
那么这三台具备相同服务的MySQL服务器就称为“MySQL集”。我们可以从上图中看出,这样的安排
实现数据同步的基础上,实现数据的读写分离,从⽽在保证数据的可靠性的同时也⼤⼤减轻了主服务器的压⼒。
下⾯我们对MySQL的主从复制和读写分离进⾏逐⼀介绍并给出配置实例。
三、MySQL主从复制原理
MySQL主从复制与读写分离有着紧密的联系,可以这么说,MySQL的读写分离的实现需要基于主从复制的基础之上。
3.1MySQL⽀持的复制类型
基于语句的复制;——基于SQL语⾔命令的复制形式,使⽤SQL命令执⾏复制,效率⾼
基于⾏的复制;——复制数据库变化的内容,不是执⾏命令
混合类型的复制;——默认采⽤语句类型的复制,如果发现有不确定问题等其他原因造成⽆法复制的情况再进⾏基于⾏的复制
3.2MySQL复制的⼯作过程
我们通过下图来理解MySQL主、从服务器是如何进⾏复制同步的过程的。
1)⾸先,MySQL主服务器在更新数据库或其他进⾏数据库相关操作时,会在⼆进制⽇志⽂件中记录这些改变(这我们在前⾯的增量备份与恢复的⽂章中进⾏了讲述,log-bin的设置以及如何使⽤mysqladmin命令刷新该⽇志。)当写⼊⽇志完成后,主服务器会告知存储引擎提交事务;
2)MySQL从服务器会将主服务器的⼆进制⽇志⽂件(Binary log)复制到其中继⽇志(Relay log)中。中继⽇志通常存放在系统缓存中,因此中继⽇志的开销很⼩;
3)从服务器通过⾃⾝线程从中继⽇志中读取事件,更新⾃⾝的⽇志⽂件使其与主服务器中的数据⼀致。
sqlserver2008开发版ps:复制过程中有⼀个很重要的限制,即在从服务器上复制是串⾏化的,这就表明主服务器上的并⾏更新操作不能在从服务器上并⾏操作。
四、MySQL主从复制配置流程与实际操作
4.1主从复制所需环境
所需设备(我们在虚拟机上模拟进⾏配置)清单:
Centos7⼀台:作为主服务器——master,ip地址为192.168.68.133
Centos7两台:作为从服务器——slave1、slave2IP地址分别为192.168.68.129、192.168.68.132
所需安装服务:
安装并且配置ntp服务、都安装了MySQL5.7版本的数据库
4.2主从复制具体流程步骤
4.2.1准备⼯作
⾸先,我们联想⼀下增量备份的恢复操作,我们都是依赖于data⽬录下的⼆进制⽇志⽂件,通过两种⽅法实现的,其中⼀种就是根据时间节点进⾏备份恢复操作的。那么我们需要进⾏MySQL主从服务器复制,就需要先同步所有MySQL服务器的系统时间。
4.2.1.1主服务器准备⼯作的配置
1)服务器名称设置以区别
hostnamectl set-hostname master
su
2)安装配置ntp服务
yum install ntp -y
#修改ntp服务配置⽂件,添加下⾯的两句
vim /f
server 127.127.68.0 #服务器本地⽹段,127.127表⽰的就是192.168 fudge 127.127.68.0 stratum 8 #时区设置(东⼋区)
#保存退出
systemctl start ntpd
#可以使⽤netstat -nutp | grep ntpd 命令查看服务开启状态
3)关闭防⽕墙和SELinux功能
systemctl stop firewalld
setenforce 0
4.2.1.2两台从服务器的准备⼯作的配置(⼆者步骤⼀致)
1)服务器名称设置
mysql无法连接到服务器hostnamectl set-hostname slave1(slave2)
su
2)两台从服务器上安装ntp和ntpdate服务并开启服务
yum install ntp ntpdate -y
systemctl start ntpd
3)两台从服务器上关闭防⽕墙和SELinux功能
systemctl stop firewalld
setenforce 0
4)使⽤ntpdate命令进⾏时间同步
[root@slave1 ~]# /usr/sbin/ntpdate 192.168.68.133
9 Jan 15:35:13 ntpdate[67450]: the NTP socket is in use, exiting 4.2.2MySQL服务的配置
4.2.2.1主服务器上MySQL的修改与配置
1)修改mysql的主配置⽂件并重启mysql服务
vim /etc/myf
#配置如下:
log-bin = master-bin #⼆进制⽇志⽂件 master-bin可以⾃⼰设置
server-id = 1 #服务器的id号,⽤于区别
log-slave-updates=true #开启从服务器更新⽇志功能(结合复制流程连接)
systemctl restart mysqld.service
2)进⼊数据库进⾏权限设置(授权)与刷新
[root@lokott ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17-log Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant replication slave on *.* to 'myslave'@'192.168.68.%' identified by '123456'; Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;#刷新系统权限表
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 603 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
注意核⼼命令:授权命令的解释,还有以上位置Position 记录数据603
命令格式:
grant replication slave on *.* to 'myslave'@'192.168.68.%' identified by '123456';
#grant ——授权命令 replication slave 从服务器复制操作 *.*表⽰的是所有数据库所有表
其具体含义是:赋予192.168.68.0⽹段的主机(服务器)复制(同步)主服务器的所有数据库数据;
4.2.2.2从服务器上MySQL的修改与配置
1)修改主配置⽂件并重启服务
vim /etc/myf
#配置如下
log-bin = mysql-bin
server-id = 2
relay-log = relay-log-bin #中继⽇志
relay-log-index = slave-relay-log-bin.index #索引⽂件
#保存退出重启
对联广告systemctl restart mysqld.service
2)进⼊数据库配置同步
模板图片人物[root@slave1 ~]# mysql -uroot -p
instantiationexception...#省略部分内容
mysql> change master to
master_host='192.168.68.133',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.68.133
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 603
Relay_Log_File: relay-log-bin.000002
网上拿到的java源代码怎么用Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.
..#省略部分内容 上⾯的两⾏表⽰从服务器给出的IO线程和数据库SQL语句都在运⾏状态
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
4.2.3进⾏主从复制的测试与验证
在主服务器上创建⼀个新的数据库,新建表和数据;在服务器上进⾏查看;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论