Mysql主从同步

Mysql数据库进行主从配置后,可以实现数据库的备份、同时应用也可以实现读写分离,提高应用的并发量。

主从同步原理

主从原理大致有三个步骤:

在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记录称为二进制日志事件。

从库通过IO线程将主库上的日志复制到自己的中继日志(Relay Log)中。

从库通过SQL线程读取中继日志中的事件,将其重放到自己数据上。

二进制日志(binary log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记录SELECT、SHOW等那些不修改数据的SQL语句。二进制日志(binary log)主要用于数据库恢复和主从复制,以及审计(audit)操作。

主从配置

基本环境

两台服务器安装相同版本的mysql数据库

可以先手动将主库的数据复制一份到从库中(统一初态)

应保证在配置过程中主库的数据不会改变,可以通过加锁实现

配置主库

修改my.cnf文件,在[mysqld]加入下面的内容:

# 服务的唯一编号

server-id = 1

# 开启mysql binlog功能

log-bin = mysql-bin

# binlog记录内容的方式,记录被操作的每一行

binlog_format = ROW

# 减少记录日志的内容,只记录受影响的列

binlog_row_image = minimal

# 指定需要复制的数据库名为db_test

# 如果备份多个数据库,重复设置这个选项即可

binlog-do-db = db_test

# 不需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可(未测试)

# binlog-ignore-db=mysql2

# 这个参数要加上,否则不会给更新的记录些到二进制文件里(未测试)

# log-slave-updates=1

# 跳过错误,继续执行复制操作(可选)

# slave-skip-errors=1

保存配置文件,重启mysql服务

// Windows直接在服务中重启,Linux:

service mysqld restart

创建提供给从库,用于同步数据的账号(是主库的账号)

create user 'slave'@'127.0.0.2' identified by 'slave';

# 赋予replication slave权限,但在使用从库的数据时,还是要使用有read权限的账号

grant replication slave on *.* to 'slave'@'127.0.0.2';

flush privileges;

网上介绍的方法大都是使用grant 权限列表 on 数据库 to ‘用户名’@’访问主机’ identified by ‘密码’;这种方式,但实测会出现……near 'identified by 密码' at line 1这个错误!

经分析,出错的原因是新版的的mysql版本已经将创建账户和赋予权限的方式分开了,所以应该使用上面的方法。

查看主库的状态

- 加“\G”可以使展示更友好

show master status\G;

记下主库状态信息中的File和Position,后面会用到

配置从库

修改my.cnf文件,在[mysqld]加入下面的内容:

# 服务的唯一编号

server-id = 2

# 开启mysql binlog功能

log-bin = mysql-bin

# binlog记录内容的方式,记录被操作的每一行

binlog_format = ROW

# 减少记录日志的内容,只记录受影响的列

binlog_row_image = minimal

# 指定需要复制的数据库名为db_test

binlog-do-db = db_test

保存配置文件,重启mysql服务

service mysqld restart

执行同步命令

# 设置主服务器ip,同步账号密码,同步位置

change master to master_host='127.0.0.1',

master_user='slave',

master_password='slave',

master_log_file='mysql-bin.000100',

master_log_pos=2411;

# 开启同步功能

start slave;

注意此处设置的是主库对应的IP,以及主库配置中创建的主库账号,以及主库状态信息中的File和Position

查看从库的状态

show slave status\G;

主要关注Slave_IO_Running和Slave_SQL_Running的状态是否都为Yes,如果是说明从库配置成功。

测试

在主库中新增一行记录,看从库是否将该数据同步了;

在主库创建新表,看从库是否将新表同步了。

可能的问题

从库未能同步主库数据

可以通过show slave status\G;检查Slave_IO_Running和Slave_SQL_Running的状态是否都为Yes

如果Slave_IO_Running的状态为Connecting,一般是从库数据被修改导致的Position失效导致的(当然原因也可能是因为网络不通、密码不对):

程序可能在slave上进行了写操作

也可能是slave机器重启后,事务回滚造成的.

所以不要手动修改从表数据,否则数据冲突会导致主从同步失败(超过了一定的重试次数,从库不再进行同步)。

如果Slave_IO_Running的状态已经为Connecting了,可以通过手动同步数据库,然后修改Position的方法解决:

停掉Slave服务:slave stop;

到主服务器上查看主机状态,记录File和Position对应的值

然后到slave服务器上执行手动同步:change master to master_log_pos=6352;

如果发生的错误比较少(只有一处),也可以在从库通过下面的方法解决(未测试):

stop slave ;

set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

start slave ;

参考

mysql 主从配置指定数据库_Mysql数据库主从配置相关推荐

  1. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  2. mysql主备数据库配置文档_MySQL数据库配置主从服务器实现双机热备实例教程

    网站:bbs.osyunwei.com 程序在:Web服务器192.168.21.129上面 数据库在:MySQL服务器192.168.21.169上面 实现目的:增加一台MySQL备份服务器(192 ...

  3. mysql数据库主从同步的原理_mysql数据库主从同步复制原理

    MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...

  4. mysql 主从复制 有数据库_mysql 数据库一对一主从(master-slave)复制

    提要:网上查了资料说主从数据库要版本一致,我这里由于之前的安装原因数据库版本并不一致,而且主服务器(master)安装在windows,从服务器(slave)安装在Linux 数据库版本: 主:10. ...

  5. mt5 mysql数据库_MySQL数据库配置主从复制

    数据库主从复制 先本机模拟实现数据库主从复制.(本次使用MySql数据库,数据库版本5.7.25) 实现步骤: ​1.安装第二个MySql数据库 ​2.配置数据库 ​3.在SpringBoot里实现数 ...

  6. centos7恢复mysql数据库_MySQL数据库升级迁移填坑记

    原库:*.*.101.73/74 系统环境: Suse 12.4 MySQL: 5.7.29 新库:*.*.110.46/47 系统环境:CentOS7.7 64位 MySQL版本: 5.7.30 [ ...

  7. mysql负载均衡与同步_MySql数据库从同步负载均衡实时备份

    如果你对MySql数据库主从同步负载均衡实时的备份,的实际操作步骤感到很是很郁闷时.你就可以浏览下面的文章了,供大家分享. 最近将四台MySQL数据库服务器配置成主从模式以实现一定的负载均衡,好象还可 ...

  8. mysql update 多个字段_MySQL数据库基础

    MySQL基础 今日目标 1. MySQL数据库简单介绍2. MySQL安装和使用3. SQL[重点]语法和关键字,实现对记录的增删改查 一 数据库介绍 1.1 什么是数据库? 存储数据的仓库,本质上 ...

  9. mysql黑窗口常用命令_mysql数据库常用命令

    1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show ...

  10. 怎么用mysql存储系统数据库_mysql数据库之基本操作和存储引擎

    一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...

最新文章

  1. Codeforces 1109F. Sasha and Algorithm of Silence's Sounds
  2. java初学之stream
  3. c语言中error c2109 是什么错,求c语言改错 error C2109: 下标要求数组或指针类型?...
  4. [跨平台系列三Docker篇]:ASP.NET Core应用
  5. jzoj3509-倒霉的小C【gcd,欧拉函数】
  6. php xss 实例,php - 关于sql注入和xss的具体实例分析
  7. 闭合导线坐标计算表_测量员人员必备:8套工程测量公式计算表,输入参数自动得出结果...
  8. 顺丰同城:拟通过香港IPO发行1.31亿股H股 预期将于12月14日在港交所上市
  9. JDRefresh 轻简下拉刷新框架
  10. sql思维导图---sql函数
  11. php获取qq音乐的api类,QQ音乐api接口梳理
  12. 夏普ar2048s打印机驱动安装_驱动人生 下载安装打印机驱动的方法
  13. 鸟哥的linux私房菜 第五章
  14. 计算几何(基础部分)
  15. 红帽子安装oracle,红帽子AS4安装oracle9i
  16. python微信抢票脚本_春节到了 教你使用python来抢票回家
  17. WordPress 5文章编辑真难用 换回老版经典编辑器教程
  18. RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022
  19. 基于J2EE的科研项目管理系统设计与实现
  20. python人脸识别代码是什么_几行代码带你实现人脸识别。Python 就是这么简单

热门文章

  1. 前端移动端适配 - 媒体查询适配方案
  2. 给现有的word和pdf加水印
  3. RDD编程-RDD算子的使用
  4. 如何对销售人员进行培训及构筑培训体系
  5. RALM: 实时 Look-alike 算法在微信看一看中的应用
  6. elementui表单插槽
  7. Thymeleaf详解
  8. 女子一家人相继出现口臭,医生:是它在作怪,3事尽快做!
  9. 2022年最新《谷粒学院开发教程》:4 - 课程管理
  10. python 基础(数据类型、运算符、流程控制、推导式、函数等...更新中)