2019独角兽企业重金招聘Python工程师标准>>>

一.mysql主从备份(复制)的基本原理
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
  
二.mysql主从备份配置方法
在进行mysql主从备份时,最好确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。
  
主机(master)配置:
1.修改mysql配置文件my.cnf
在[mysqld]标签下添加以下几行

[plain] view plaincopy

  1. log-bin #开启二进制日志

  2. server-id=id #主服务器id号

  3. binlog-do-db=db_nameA #指定对db_nameA记录二进制日志

  4. binlog-ignore-db=db_namB #指定不对db_namB记录二进制日志

注意:
log-bin,server-id是配置文件中必须添加的内容。此时主服务器默认对所有数据库进行备份。如果需要特殊指明只对某个数据库进行备份或不备份,则可以加入binlog-do-db和binlog-ignore-db选项。有关(log-bin的详细说明见附录1)

在测试主机上,我们实际添加入如下内容:

[plain] view plaincopy

  1. log-bin

  2. server-id=1

  3. binlog-do-db=test

2.为从服务器添加mysql账户并配置权限
在主服务器上,必须为从服务器创建一个用来连接主服务器的用户,并设置replication slave权限。所用具体命令如下:

[sql] view plaincopy

  1. grant replication slave

  2. on *.*

  3. to '帐号' @ '从服务器IP' identified by '密码';

在测试机上,我们实际执行:

[sql] view plaincopy

  1. grant replication slave

  2. on *.*

  3. to 'replication'@'%' identified by 'sosotest';

这时在mysql库的user表中使用

[sql] view plaincopy

  1. select * from user where user = 'replication' \G;

可以看到Repl_slave_priv项对就的值为Y。
3.导出主服务器数据
导出主服务器数据,以备之后将其导入从服务器,使主从服务器的初始状态保持一致。

在测试机上,我们实际执行:

[sql] view plaincopy

  1. mysqldump test > test.bak

4.记录File 及Position 项的值
  重启mysql,使用show master status\G;查看主服务器状态,记录File 及Position 项的值,以便之后对从服务器进行配置。
  
在测试机上,我们实际执行时看到的结果如下:
*************************** 1. row ***************************
File: simba-bin.000008
Position: 79
Binlog_Do_DB: test
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

其中File为imba-bin.000008;Position为79。

至此主服务器配置完毕

从机(slave)配置:
1.修改mysql配置文件my.cnf
在[mysqld]标签下添加以下面一行:

[plain] view plaincopy

  1. server-id=id #从机id

实际中,我们添加:

[plain] view plaincopy

  1. server-id=2

2.导入主机数据库
在测试机上,我们实际执行:
mysql test < test.bak

3.重启mysql数据库并设置相关参数

[sql] view plaincopy

  1. change master to

  2. master_host = '10.1.146.133',

  3. master_user = 'replication',

  4. master_password = 'sosotest',

  5. master_log_file = 'darkstar-bin.000008',

  6. master_log_pos = 79;

  7. slave start;

4.检查数据库查看相关参数
  使用show slave status \G;查看相关参数是否正确。
  在实际执行时,我们在从机上看到的结果如下(只摘取了部分输出):
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.1.146.133
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: darkstar-bin.000006
Read_Master_Log_Pos: 79
Relay_Log_File: simba-relay-bin.000003
Relay_Log_Pos: 171
Relay_Master_Log_File: darkstar-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……

对部分参数的解释:
Slave_IO_State: Waiting for master to send event 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上参数说听slave正常运行,正等待主服务器发来的消息。此时若用netstate命令可以看到从机与主机间已经建立了一条边接。

特别需要注意的两个参数是:
Master_Log_File和Read_Master_Log_Pos。Master_Log_File代表主机上用于主备同步的日志文件名,Read_Master_Log_Pos代表上一次成功同步到的日志文件中的位置。
如果这两项与先前在主服务器上看到的File及Position的值不相符,则无法正确进行同步。

三.主从备份的实现细节
mysql使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上)。当发出start slave时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以即为主服务器上show processlist输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是sql线程,由从服务器创建,用于读取中继日志并执行日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容。


1.复制线程状态
  通过show slave status\G和show master status可以查看复制线程状态。常见的线程状态有:
(1)主服务器Binlog Dump线程
Has sent all binlog to slave; waiting for binlog to be updated
线程已经从二进制日志读取所有主要的更新并已经发送到了从服务器。线程现在正空闲,等待由主服务器上新的更新导致的出现在二进制日志中的新事件。

(2)从服务器I/O线程状态
Waiting for master to send event
线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout秒,则发生超时。此时,线程认为连接被中断并企图重新连接。

(3)从服务器SQL线程状态
Reading event from the relay log
线程已经从中继日志读取一个事件,可以对事件进行处理了。
Has read all relay log; waiting for the slave I/O thread to update it
线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。

2.复制过程中使用的传递和状态文件
  默认情况,中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序列号。中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。
  从服务器在data目录中另外创建两个小文件。这些状态文件默认名为主master.info和relay-log.info。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。

附录1
关于log_bin日志 
  my.conf 文件中的[mysqld]标签下的log_bin指定日志文件,如果不提供文件名,mysql将自己产生缺省文件名。mysql会在文件名后面自动添加数字引,每次启动服务时,都会重新生成一个新的二进制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需要多个语句。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。
  以后对数据库每做的一次操作,都会在binlog中有所记录。

转载于:https://my.oschina.net/u/2375576/blog/528380

mysql主从库配置方法相关推荐

  1. mysql主从库配置ps:mysql5.6

    1 Mysql cluster版本主从服务器搭建实践 主从的作用:MySQL的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表. ...

  2. docker mysql 主从库配置

    拉取mysql 5.7版本 docker pull mysql:5.7 创建主从容器 docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT ...

  3. centos 下 mysql 主从库搭建

    作者:蘑菇 今天在本本上装了个mysql主从库配置,中间遇到了几个问题,不过经过搜寻资料,已经可以正常工作了. 过程写下来做个记录: 因为上次已经装过LNMP,所以只要再装一个mysql做从库就好了. ...

  4. MySQL主从数据库配置和常见问题

    转载自   MySQL主从数据库配置和常见问题 本篇主要介绍MySQL的主从数据配置方法. 公司运维能力不是太好,数据库最近出了一次问题,导致丢失了一天的数据,并且某个服务宕机一晚上.为了避免再次出现 ...

  5. MySQL主从同步配置及存量数据同步方案

    实践准备: 准备两台服务器: 主:192.168.8.10 备:192.168.8.11 MySQL的版本最好保持一致. 步骤一: 授权给从服务器 创建一个专门的同步账号: GRANT REPLICA ...

  6. windows下配置mysql主从复制_Windows下MySQL主从复制的配置方法

    MySQL主从复制允许将来自一个数据库(主数据库)的数据复制到一个或多个数据库(从数据库). 主数据库一般是实时的业务数据写入和更新操作,从数据库常用的读取为主. 主从复制过程: 1.主服务器上面的任 ...

  7. mysql主从服务器宕机,Mysql主从数据库配置及宕机处理

    一.概要说明 数据库读多写少,主库负责写,从库负责读.一主多从,从而解决读多写少.mysql 宕机时将选择pos最大的从库做为新的主库,其他从库继续担任本身的职责.sql 二.Mysql备份原理 简单 ...

  8. mysql 主从同步配置

    mysql 主从同步配置 转载于:https://www.cnblogs.com/liran123/p/10202534.html

  9. centos mysql 同步时间_centos:mysql主从同步配置(2018)

    centos:mysql主从同步配置(2018) 主服务器:10.1.1.144; 从服务器:10.1.1.163; 配置过程 1.进入主服务器,停止主服务mysql服务: systemctl sto ...

最新文章

  1. 极索(Gsuo)推出新版地图采用Gmap设计思路
  2. 2013计算机视觉代码合集一
  3. HNOI模拟 Day3.22
  4. USACO2.2【统计,dp,模拟,位运算】
  5. Creating a Pulsing Circle Animation
  6. java float 存储方式_java-解析以字符串形式存储的float会抛出异...
  7. 检测正常和不正常图_医生提醒:激素正常不等于内分泌正常,带你走出内分泌失调误区...
  8. python的argparse模块parse_known_args()方法的使用
  9. Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
  10. python文本分类评价指标 top1如何计算_推荐算法评价指标
  11. ecg 幅度_心电图(ECG或EKG)设计原理及实例应用
  12. C++/MFC 串口通讯——光源控制器控制
  13. 数字图像处理_07.2_(顶帽变换,击中击不中原理)
  14. 网络协议(一) TCP/IP 协议
  15. 掌握茼蒿施肥方式,想不高产都难。
  16. 聚力国家工业信息安全发展,未来智安加入工业信息安全产业发展联盟
  17. 用c++语言编写的小程序,利用C++编写一些有趣的小程序
  18. ASO小技能:自动输入搜索框文本
  19. FPGA ISE PROMs下载程序问题
  20. 中标麒麟龙芯桌面版重置root密码

热门文章

  1. Python「八宗罪」
  2. 使用多个DNS供应商以缓解DDoS攻击
  3. 完全掌握JavaMail
  4. swift如何打印对象的地址
  5. node.js入门 - 9.api:http
  6. Python 每次处理一个字符
  7. [转]XCode中修改缺省公司名称/开发人员名称
  8. 给求职的同学的几点建议
  9. ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
  10. 九度OJ 区间问题 10000个随机正负数生成