ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【Mysql】主从同步配置

2020-07-15 12:32:26  阅读:309  来源: 互联网

标签:同步 slave Mysql 复制 mysql 服务器 日志 数据 主从


Mysql主从同步简介

  指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

  一句话表示就是,主数据库做什么,从数据库就跟着做什么。

mysql复制的类型

  • 1.基于语句的复制 :主库把sql语句写入到bin log中,完成复制
  • 2.基于行数据的复制:主库把每一行数据变化的信息作为事件,写入到bin log,完成复制
  • 3.混合复制:上面两个结合体,默认用语句复制,出问题时候自动切换成行数据复制

  tip:和上面相对应的日志格式也有三种:STATEMENT,ROW,MIXED。

  1. STATEMENT模式(SBR)
    每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
  1. ROW模式(RBR)
    不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

  2. MIXED模式(MBR)
    以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

mysql主从复制原理

  1.Master 数据库只要发生变化,立马记录到Binary log 日志文件中

  2.Slave数据库启动一个I/O thread连接Master数据库,请求Master变化的二进制日志

  3.Slave I/O获取到的二进制日志,保存到自己的Relay log 日志文件中。

  4.Slave 有一个 SQL thread定时检查Realy log是否变化,变化那么就更新数据

    

 为什么要用mysql 的主从

1.实现服务器负载均衡

       即可以通过在主服务器和从服务器之间切分处理客户查询的负荷,从而得到更好的客户相应时间。通常情况下,数据库管理员会有两种思路。

       一是在主服务器上只实现数据的更新操作。包括数据记录的更新、删除、新建等等作业。而不关心数据的查询作业。数据库管理员将数据的查询请求全部 转发到从服务器中。这在某些应用中会比较有用。如某些应用,像基金净值预测的网站。其数据的更新都是有管理员更新的,即更新的用户比较少。而查询的用户数 量会非常的多。此时就可以设置一台主服务器,专门用来数据的更新。同时设置多台从服务器,用来负责用户信息的查询

       二是在主服务器上与从服务器切分查询的作业。在这种思路下,主服务器不单单要完成数据的更新、删除、插入等作业,同时也需要负担一部分查询作业。而从服务器的话,只负责数据的查询。当主服务器比较忙时,部分查询请求会自动发送到从服务器重,以降低主服务器的工作负荷。

2.通过复制实现数据的异地备份

       可以定期的将数据从主服务器上复制到从服务器上,这无疑是先了数据的异地备份。在传统的备份体制下,是将数据备份在本地。此时备份 作业与数据库服务器运行在同一台设备上,当备份作业运行时就会影响到服务器的正常运行。有时候会明显的降低服务器的性能。同时,将备份数据存放在本地,也 不是很安全。如硬盘因为电压等原因被损坏或者服务器被失窃,此时由于备份文件仍然存放在硬盘上,数据库管理员无法使用备份文件来恢复数据。这显然会给企业 带来比较大的损失。

3.提高数据库系统的可用性

       数据库复制功能实现了主服务器与从服务器之间数据的同步,增加了数据库系统的可用性。当主服务器出现问题时,数据库管理员可以马上让从服务器作为主服务器,用来数据的更新与查询服务。然后回过头来再仔细的检查主服务器的问题。此时一般数据库管理员也会采用两种手段。

       一是主服务器故障之后,虽然从服务器取代了主服务器的位置,但是对于主服务器可以采取的操作仍然做了一些限制。如仍然只能够进行数据的查询,而 不能够进行数据的更新、删除等操作。这主要是从数据的安全性考虑。如现在一些银行系统的升级,在升级的过程中,只能够查询余额而不能够取钱。这是同样的道 理。

       二是从服务器真正变成了主服务器。当从服务器切换为主服务器之后,其地位完全与原先的主服务器相同。此时可以实现对数据的查询、更新、删除等操 作。为此就需要做好数据的安全性工作。即数据的安全策略,要与原先的主服务器完全相同。否则的话,就可能会留下一定的安全隐患

Mysql主从同步配置

  环境准备

  服务器系统:CentOS 7.4

  Mysql版本:5.8

  mysql1(master): 192.168.0.1:3306

  mysql2(slave): 192.168.0.2:3306

  1、在2个服务器上分别安装Mysql服务,参考:【Linux】CentOS 7.4 安装 MySQL 8.0.12 解压版

  2、master数据库,创建复制用户并授权

    登录mysql服务

    1)新增用户

      命令:create user 'replace'@'%' identified by '123456';

    2)给用户授权

      命令:grant all privileges on *.* to replace@'%' with grant option;

    3)刷新权限

      命令:flush privileges;

  2、配置mysql master服务

    编辑master节点上的mysql的配置文件

    命令:vim /etc/my.conf

 1 # -----主从配置 主节点-----
 2 
 3 #主服务器唯一ID
 4 server-id=1
 5 #启用二进制日志
 6 log-bin=mysql-bin
 7 # 设置不要复制的数据库(可设置多个) 
 8 binlog-ignore-db=mysql 
 9 binlog-ignore-db=information_schema 
10 #设置需要复制的数据库 
11 binlog-do-db=test_slave
12 #设置logbin格式 
13 binlog_format=STATEMENT

  3、重启master mysql服务

  4、查询master状态

    命令:show master status;

    

  5、master binlog日志查看

    位置:./data/mysql-bin.000002 

    查看命令:./data/mysql-bin.000002 

    

  6、配置mysql slave服务

    编辑slave节点上的mysql的配置文件

    命令:vim /etc/my.conf

1 # -----主从配置 从节点----- 
2 
3 #从服务器唯一ID
4 server-id=2
5 #启用中继日志 
6 relay-log=mysql-relay

  7、重启slave mysql服务

  8、在slave上配置复制主机

    1)登录slave mysql服务

    2)执行一下命令

1 CHANGE MASTER TO 
2 MASTER_HOST = '192.168.0.1',  
3 MASTER_USER = 'replace', 
4 MASTER_PASSWORD = '123456',
5 MASTER_PORT = 3306,
6 MASTER_LOG_FILE='mysql-bin.000002',
7 MASTER_LOG_POS=2676; 

      注意:

      # MASTER_LOG_FILE='mysql-bin.000002',#与主库File 保持一致
      # MASTER_LOG_POS=2676 , #与主库Position 保持一致

      

    3)启动从服务器复制功能

      启动从服务命令:start slave;

      停止从服务命令:stop slave;

      重置主节点命令:reset master;

      如果要重新配置主从,需要新停止从服务->重只主节点->设置主节点信息->启动从服务

    4)查看从服务信息

      命令:show slave status\G;

      

      #下面两个参数都是Yes,则说明主从配置成功!

      # Slave_IO_Running: Yes

      # Slave_SQL_Running: Yes

验证Mysql主从同步

  1、登录master,创建数据库 test_slave

1 CREATE DATABASE test_slave;

  2、创建表

1 CREATE TABLE `test_tbl` (
2   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
3   `title` varchar(100) NOT NULL,
4   `update_date` date DEFAULT NULL,
5   PRIMARY KEY (`id`)
6 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  3、插入数据

1 INSERT INTO `test_slave`.`test_tbl`(`id`, `title`, `update_date`) VALUES (1, '白色', '2020-07-10');

  4、更新数据

1 UPDATE `test_slave`.`test_tbl` SET `title` = '黑色', `update_date` = '2020-07-10' WHERE `id` = 1;

  查看master 和 slave 节点数据是否相同

标签:同步,slave,Mysql,复制,mysql,服务器,日志,数据,主从
来源: https://www.cnblogs.com/h--d/p/13304836.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有