码迷,mamicode.com
首页 > 数据库 > 详细

MySQL数据库服务主从复制

时间:2019-02-22 12:24:05      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:inf   binlog   获取   dac   根据   p12   数据库宕机   日志功能   sys   

随着访问量的不断增加,单台MySQL数据库服务器压力不断的增加,需要对MySQL进行优化和架构改造,如果MySQL优化不能明显改善,可以使用高可用,主从复制,读写分离,拆分库,拆分表等方法来进行优化. MySQL主从复制的目的是实现数据冗余备份,将master数据库数据定时同时到slave库中,一旦master数据库宕机,可以将Web应用数据库配置快速切换至slave数据库,确保Web应用有较高的高可用率.

一、什么是主从复制?**

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。

二、主从复制的作用

1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
3、读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

三、主从复制原理

主从复制架构图
技术图片
mysql主从数据同步是一个异步复制的过程,要实现复制首先需要在master上开启bin-log日志功能,bin-log日志用于记录在master库中执行的增,删,改,查的SQL语句整个过程需要开启3个线程,分别是master 开启I/O线程,slave 开启I/O线程和SQL线程,以下是具体原理:
(1)slava上执行slave start, slave I/O线程会通过在master服务器上创建的授权用户连接上master,并请求master从指定的文件和位置之后发送bin-log日志(日志文件名和位置就是在配罝主从复制服务时执行change master命令指定的);
(2)master服务器接收到来自Slave服务器的I/O线程的请求后,其上负责复制的I/O线程会根据slave服务器的I/O线程请求的信息分批读取指定bin-log日志文件指定位置之后的bin-log日志信息,然后返回给slave端的I/O线程。返回的信息中除了bin-log日志内容外,还有在Master服务器端记录的新的Binlog文件名称以及在新的bin-log中的下一个 指定更新位置
(3)slave服务器I/O线程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log(中继日志)文件(MySQL-relay-bin.xxxxxx)的最末端,并将读取到的master端的bin-log的文件名和position点记录到master.info文件中,以便在下一次读取的时候能告知master从相应的bin-log文件名及最后一个position点开始发起请求;
(4)slave服务器 SQL线程检测到realy-log中内容有更新,会立刻解析realy-log日志中的内容,将解析后的SQL语句在slave服务器执行,执行成功后slave库与master库保持一致。

四、环境部署

master   192.168.10.1 
    slave    192.168.10.2

1、都要安装mysql数据库并配置
yum install -y mariadb
2、修改主、从配置文件 /etc/my.cnf
master:在[mysqld]标签下加入下面二句
log-bin=mysql-bin
server-id=1

slave:在[mysqld]标签下加入下面一句
server-id=2
3、修改完成之后重新启动MySQL
systemctl start mariadb
此时可以看 ll /var/lib/mysql/ 看下是否已经有二进制日志mysql-bin.000001
技术图片
4、建立复制账号并授权、授权给slave服务器
grant replication slave on . to ‘test‘@‘192.168.10.2‘ identified by ‘123456‘;
授权时如果想授权任何一个IP都可以登陆,则把IP地址改为 % 号
grant replication slave on . to ‘test‘@‘%‘ identified by ‘123456‘;
flush privileges; --> 刷新权限
授权完成后,在从服务器上登陆测试
mysql -utest -h192.168.122.10 -p123456
5、给master加上锁,防止有新的数据写入
flush tables with read lock;
6、查看二进制日志文件
show master status;
技术图片
7、退出master数据库,登陆slave数据库,关闭slave复制线程(默认停止状态)
stop slave;
8、配置主从关系,,在slave服务器上写代码、需要配置连接主服务器的信息,从服务器能不能在主服务器上面获取二进制日志,全靠下面的配置信息
change master to master_user=‘test‘,master_password=‘123456‘,master_host=‘192.168.10.1‘,
master_port=3306,master_log_file=‘mysql-bin.000001‘,master_log_pos=245;
9、slave服务器启动slave线程
start slave;
10、启动完成之后,再查看slave线程连接主服务器的状态
show start slave;
下面两个显示都为yes算成功了
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

MySQL数据库服务主从复制

标签:inf   binlog   获取   dac   根据   p12   数据库宕机   日志功能   sys   

原文地址:https://blog.51cto.com/12191098/2353185

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!