MySQL配置主主及主从备份
原文:https://www.cnblogs.com/ahaii/p/6307648.html
MySQL主从备份配置实例
场景:
1、主服务器192.168.0.225、从服务器192.168.0.226。其中,主服务器上已有数据。
2、主从服务器上的mysql版本及安装配置相同。
一、主从备份的原理:
主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句。
这要求两台服务器有同样的初态。
二、同步初态:
1、将主服务器要同步的数据库加锁,避免同步时发生改变:
>use database_name;
>flush tables with read lock;
2、使用mysqldump工具导出数据:
mysqldump -uroot -pxxx database_name >database_name.sql
3、备份完成后,解锁数据库:
>unlock tables;
4、将初始数据导入从数据库:
>create database database_name;
>use database_name;
>source database_name.sql;
完成以上操作后,主从服务器就有一样的初态了。
三、主从同步设置:
1、配置从数据库:
/etc/my.cnf主要配置如下:

log-bin=mysql-bin #开启二进制日志 server-id = 2 #主数据库id为1,不能相同。
replicate_wild_do_table=test.% #只同步test库下的表
relay_log=mysqld-relay-bin #记录中继日志
log-slave-updates=YES #从服务器同步后记录日志

修改完成后重启mysql服务。
2、查看主服务器日记记录位置:
>show master status\G
显示内容如下:

***************** 1. row ****************
File: mysql-bin.000001 #当前记录的日志
Position: 80647293 #日志中记录的位置
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

3、主服务器创建允许从服务器同步数据的账户:
>grant replication slave on *.* to 'user_name'@'192.168.0.226' identified by 'ahaii';
4、从服务器开启同步:

>change master to
master_host='192.168.0.225',
master_user='user_name',
master_password='ahaii',
master_log_file='mysql-bin.000001',
master_log_pos=80647293;

配置完以上后,重启从服务器mysql服务。
5、查看从服务器是否已经成功开启同步:
>show slave status\G
显示如下:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.225
Master_User: user_name
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1114
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 1260
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table: test.%
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1114
Relay_Log_Space: 1563
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)

其中:Slave_IO_Running和Slave_SQL_Running的状态都是YES,说明同步开启成功。
现在就可以去主服务器上的test库下创建表开测试同步了。
MySQL主主备份配置实例
在主从备份配置完毕的基础上实现双主备份:
一、在从服务器上创建用于同步的帐号:
>grant ...
二、修改主服务器mysql.cnf,加入
replicate_wild_do_table=test.%
relay_log=mysqld-relay-bin
log-slave-updates=YES
三、记录从服务器二进制日志文件名与位置:
>show master status\G
四、主服务器开启同步设置:

>change master to
master_host='192.168.0.226',
master_user='user_name',
master_password='ahaii',
master_log_file='mysql-bin.000009',
master_log_pos=107;

然后重启mysqld服务。
以上就是mysql主从、主主设置的过程。
===================
四、疑惑记录:
1、关于my.cnf配置文件中binlog-format的值:
mysql的binlog-format有三种格式,分别是:row、statement和mixed
1.1、row:基于行的复制(row-based replicate,RBP)
优点:
binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题
缺点:
所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。
1.2、statement:基于SQL语句的复制(statement-based replicate, SBR)
每一条会修改数据库的SQL语句都会被记录在binlog中。
优点:
不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。)
缺点:
由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题).
使用以下函数的语句也无法被复制:
* LOAD_FILE()
* UUID()
* USER()
* FOUND_ROWS()
* SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)
同时在INSERT ...SELECT 会产生比 RBR 更多的行级锁。
1.3、mixed:混合模式复制(mixed-based replicate,MBR)
mysql的默认模式。
mixed模式是以上两种模式的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。
2、关于复制参数:replicate-do-db、replicate-do-table、replicate-wild-do-table
MySQL官网的介绍:https://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html
2.1、replicate-do-db:在从服务器上设置需要同步的数据库,要同步多个库时可以写多行,每行一个。
缺点:不适用于跨库数据更新的复制。
2.2、replicate-do-table:在从服务器上设置需要同步的表,格式为db_name.tb_name。每行一个,同步多个表时需要写多行。
缺点:不适用于跨库数据更新的复制。
2.3、replicate-wild-do-table:在从服务器上设置需要同步的数据库,格式为db_name.tb_name。每行一个,同步多个表时需要写多行。可使用通配符如"%"、"_",来匹配多个表,如同步所有以share字符串开头的数据库的所有use字符串开头的表 :replicate-wild-do-db=share%.user%。
支持跨库数据更新的复制。
MySQL配置主主及主从备份的更多相关文章
- MySQL + Amoeba 负载均衡、主从备份方案
1. 基本环境 4台内网虚拟机的操作系统都是ubuntu-14.04.4 64位 IP为:192.168.169.11.192.168.169.12.192.168.169.13.192.168.1 ...
- mysql配置主从复制
1.原理: MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在 ...
- Mysql(Mariadb)数据库主从
Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据 ...
- MySQL 主主同步配置和主从配置步骤
★预备知识 : 1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服 ...
- 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践
双机热备的概念简单说一下,就是要保持两个数据库的状态 自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换 ...
- Mysql主从备份、主主备份
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- mysql主从配置主主配置
一. 概述 MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步.主从模式.互相备份模式的功能.本文档主要阐述了如何在linux系 ...
- 学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- CentOS 6.5 下MySql主从、主主配置
参考网站: http://blog.csdn.net/faye0412/article/details/6280761 http://blog.csdn.net/kk185800961/article ...
随机推荐
- Hive命令 参数
1.hive -h 显示帮助 2.hive -h hiveserverhost -p port 连接远程hive服务器 3.hive --define a=1 --hivevar b= ...
- 测试、集成等领域最好的Java工具
无论你是刚入门,还是进行了一段时间的开发,使用合适的工具编程都会让你事半功倍,它能够让你更快的编写代码,能够快速及时的为你识别出Bug,能够让你的代码质量更上一层楼. 如果你选择的编程语言是Java, ...
- springMVC入门-02
本节会在上节基础上讨论springMVC如何传值的问题. 在添加dispatcherServlet之后,拦截器会将url中的参数拦截下来,使之可以在controller中使用.以下代码就是在前台输入u ...
- 卸载oracle 10g
1.开始->设置->控制面板->管理工具->服务——> 停止所有Oracle服务.(没有起动的就不用停用了)2.开始->程序->Oracle - OraD ...
- 审计系统---堡垒机项目之用户交互+session日志写入数据库[完整版]
2018-06-20 时隔一个多月,忘记了之前的所有操作,重拾起来还是听不容易的,想过放弃,但还是想坚持一下,加油. 世界杯今天葡萄牙1:0战胜摩洛哥,C 罗的一个头球拯救了时间,目前有4个射球,居2 ...
- Logstash和Flume-NG Syslog接收小测试
目前在大规模日志处理平台中常见的日志采集器可以采用Logstash或Flume.这两种日志采集器架构设计理念基本相似,都采用采集-过滤处理-输出的方式.下面对这两种采集器Syslog接收性能做个简单测 ...
- 【跨域】#001 JSONP原理解析【总结】
一.JSONP 是什么? 1.1 概念 JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料.由于同源策略,一般来说位于 server1 ...
- 一个最简单的WebSocket hello world demo
服务器端代码不超过42行: const WSServer = require("./server.js"); var counter = 0; function createWeb ...
- 使用 FRP 反向代理实现 Windows 远程连接
互联网普及率的日渐攀升与 IPv4 资源的持续减少,现在大部分家庭宽带都不会分配公网 IP ,这使一些网络应用的实现多了些困难,像个人的 NAS 和一些智能家居设备.对于分配公网 IP ,各地运营商的 ...
- 【ansible】Windows开启远程控制错误解决方案:无法检查防火墙状态
这个在老版本的Windows系统才有这种bug.例如Windows 2008 R2和Windows 7,如果你的系统的阿里云的Windows server 2008 R2,无需装这个,好像阿里云的系统 ...