Mysql 5.6主从同步配置

主从同步,本质是利用数据库日志,将主库数据复制一份到从库,本质上是使用了数据复制技术。

本文概要

  1. 主库的基本配置
  2. 从库的基本配置
  3. 完全同步的步骤
  4. 注意事项
  5. 工作原理

1. 主库的基本配置

做两件事:启用日志(记录数据库操作),赋予从库复制权限。配置如下:

  1. 启用日志:
# sync_binlog=1 #默认为0,当 sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。 #当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
log_bin=mysql-bin #打开日志,并指定日志基本名称。
log_bin_index=mysql-bin.index
log_bin_trust_function_creators=1
expire_logs_days = 3

  1. 给予从库复制权限

    (不同的主机,配置不同的用户名,以区分。如slave95,m95m96,或者采用统一用户名,如下所示:)

mysql> grant replication slave on *.* to ‘slave‘@‘%‘ identified by ‘[email protected]‘;
mysql> flush privileges;

2. 从库的基本配置

做两件事:启用(中继)日志,指定从库从主库某个文件(某个位置)复制日志。

  1. 启用(中继)日志
#log-bin=mysql-bin #从库用不上
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
skip-slave-start   #防止复制随着mysql启动而自动启动
slave-skip-errors=all
relay_log_info_repository = TABLE
master_info_repository    = TABLE
relay_log_recovery        = 1
log_bin_trust_function_creators=1
slave-net-timeout = 60            #默认值3600.意味着没有得到更多数据之后slave等待时间
expire_logs_days = 3
read-only=1  #可选项,做读写分离时,可配置

replicate_wild_do_table=datacenter.% #告诉从服务器线程限制复制更新的表匹配指定的数据库和表名模式的语句。
replicate_wild_do_table=kettle.%
  1. 指定从库从主库某个文件(某个位置)复制日志
mysql>CHANGE MASTER TO
MASTER_HOST=‘192.168.100.104‘,
MASTER_PORT=3306,
MASTER_USER=‘slave‘,
MASTER_PASSWORD=‘[email protected]‘,
MASTER_LOG_FILE=‘mysql-bin.000001‘,
MASTER_LOG_POS=839;

3. 完全同步的步骤

主库

  1. 进行锁表,防止数据写入

    使用命令:

mysql> flush tables with read lock;

2.备份数据

mysqldump -uroot -p -B kettle datacenter|gzip>/ddhome/data.sql.gz

3.查看master 状态,解开锁表功能

mysql> show master status;
mysql> unlock tables; 

4.把mysql备份文件传到从库机器,进行数据恢复

scp mysql.bak.sql [email protected]:/tmp/

从库

  1. 停止从库的状态
mysql> stop slave;
  1. 导入数据
mysql -uroot -p  </tmp/mysql.bak.sql
or
mysql> source /tmp/mysql.bak.sql
  1. 设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项
change master to master_host = ‘10.130.254.13‘, master_user = ‘slave‘, master_port=3306, master_password=‘[email protected]‘, master_log_file = ‘mysql-bin.000104‘, master_log_pos=481224382;
  1. 重新开启从同步
mysql> start slave;
  1. 查看同步状态
mysql> show slave status\G

查看:(参考:mysql主从复制搭建中几种log和pos详解 - 学无涯,愈进而愈惘 - CSDN博客)

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

          Master_Log_File: mysql-bin.000125
      Read_Master_Log_Pos: 947053504    #从库IO线程读取主库日志的位置
           Relay_Log_File: slave-relay-bin.000064
            Relay_Log_Pos: 947053667    #从库IO线程写入本地日志
    Relay_Master_Log_File: mysql-bin.000125
      Exec_Master_Log_Pos: 947053504    #从库sql线程执行到哪里

简单来讲就是从库先通过io线程读取主库的二进制文件(Master_Log_File)和位置(Read_Master_Log_Pos)然后缓存到本地(从库服务器)的中继文件(Relay_Log_File)中并记录已经读取到的位置(Relay_Log_Pos),再通过从库的sql线程去读取中继文件(Relay_Log_File),这个sql线程执行会记录已经执行到了哪个文件(Relay_Master_Log_File)和哪个位置(Exec_Master_Log_Pos)。

4. 注意事项

  1. 从库每次都要手动start slave,不能自动启动。如果是双主热备时,则自动启动;
  2. 在Slave上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 来解决跨库更新的问题

5. 工作原理

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)。
  2. Slave将Master的日志拷贝到自己的中继日志(relay log)中。
  3. Slave重新执行中继日志中的事件并放到自己的数据库中。

MySQL复制的缺点

MySQL的复制(replication)功能让人且爱且恨。MySQL复制配置简单,深受开发人员的喜欢,基于复制的读写分离方案也非常流行。而MySQL数据库高可用大多也是基于复制技术,但是MySQL复制本身依然存在部分缺陷,最为主要的问题如下:

  • 数据丢失问题(consistency)
  • 数据同步延迟问题(delay)
  • 扩展性问题(scalability)

    从MySQL 5.7的lossless semi-sync replication已经解决了数据丢失的问题,MySQL 5.7的multi-thread slave也解决了数据同步延迟的问题,MySQL 5.7的Group replication也扩展性问题。

参考文献



tips:本文属于自己学习和实践过程的记录,很多图和文字都粘贴自网上文章,没有注明引用请包涵!如有任何问题请留言或邮件通知,我会及时回复。

原文地址:https://www.cnblogs.com/small-k/p/8414723.html

时间: 2024-10-10 19:57:56

Mysql 5.6主从同步配置的相关文章

Mysql 5.6主从同步配置与解决方案

主库IP:192.168.1.10 从库IP:192.168.1.11 1.主库配置编辑my.cnf: # 启用二进制日志 log_bin = mysql-bin server-id = 111 log-bin-index=mysql-bin.index sync_binlog=1 binlog_format=mixed binlog-do-db = testdb //同步数据库 binlog-ignore-db = mysql binlog-ignore-db = performance_sc

MySQL Replication的主从同步的常用2种配置方式

因为实际的业务需求最近就需要部署一些mysql服务器,而在部署mysql服务器中在做主从同步时用的都是MySQL Replication的主从同步的方法,当然实现mysql主从同步的方法还有很多,这里就只说使用MySQL Replication的主从同步的功能,在实现mysql的主从同步的常用的2种配置方式,当然可以根据实际的生产环境选择不同的方式,在这里就简单的把2种配置方法配置my.cnf说一下,因为以前有写过mysql的主从同步方法,这里就不再赘述了,需要可以参看:http://jim12

配置mysql数据库的主从同步实验

mysql数据库的主从同步实验 一. 实验环境部署 主服务器(mysql  master) IP: 192.168.8.241  端口3306 从服务器(mysql  slave)  IP: 192.168.8.242  端口3306 虚拟机配置:内存2G,硬盘28G,2块网卡(1块网卡也可以),注意复制虚拟机 时候选择生成不同的MAC地址,虚拟机生成之后,网卡的的名称会变为eth2.eth3,修改/etc/udev/rules.d/70-persistent-net.rules文件,将无效的M

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

企业生产MySQL主从同步配置

MySQL主从同步配置 前言:测试环境 一台mysql多个实例 主机IP地址 10.0.0.52 Master   3306 Salve    3307 一.主库要开启binlog服务 1. 1修改配置文件3306/my.cnf [[email protected] ~]# egrep "log-bin|server-id" /data/3306/my.cnf   log-bin = /data/3306/mysql-bin server-id = 1 1. 2查看主库有没有开启bin

MySQL Ubuntu 主从同步配置

MySQL Ubuntu 主从同步配置 一.在两台Linux机器上安装MySQL 二.Master主服务器配置(192.168.1.3) 1.编辑my.cnf编(命令查找文件位置:find / -name my.cnf) vi /etc/mysql/my.cnf 在[mysqld]中添加: server-id = 1 log_bin = master-bin log_bin_index = master-bin.index binlog_do_db = my_data binlog_ignore

Linux服务器集群架构部署搭建(六)数据库服务器MySQL编译安装及主从同步配置(1)

命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想. 作者:燁未央_Estelle声明:测试学习,不足之处,欢迎指正. 第一章 数据库企业应用场景 1.1 数据库的企业应用 MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速度快.总

MySQL主从同步配置实现数据库备份

作为数据库的主要备份手段,主从同步能实现从主库(即当前使用的业务数据库)异步同步数据到从库(备份库),当主库数据库或主机出现当机不能启动时,可以通过切换到从库实现业务系统的快速恢复. 首先介绍一下我的环境,我有一个已经使用中的MySQL数据库A,然后我新装了一台MySQL数据库B作为A的从库. 一.master库A设置 先修改mysql的配置 vim /etc/my.cnf 插入下面2行 server-id=1   #这个ID是唯一的,不能和其他的主库或者从库一样 log-bin=mysql-b

centos下MySQL主从同步配置

centos下MySQL主从同步配置一.环境 主机: master操作系统:centos 5.3 IP:192.168.1.222 MySQL版本:5.0.77 从机: slave操作系统:centos 5.3 IP:192.168.1.220 MySQL版本:5.0.77 二.创建数据库 分别登录master机和slave机的mysql:mysql –u root –p 创建数据库:create database repl; 三.master机和slave机的相关配置 1.修改master机器