一.mysql主从备份(复制)的基本原理

mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

二.mysql主从备份配置方法

在进行mysql主从备份时,最好确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。

主机(master)配置:

1.修改mysql配置文件my.cnf

在[mysqld]标签下添加以下几行

log-bin #开启二进制日志

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

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

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

注意:

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

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

log-bin

server-id=1

binlog-do-db=test

2.为从服务器添加mysql账户并配置权限

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

grantreplication slave

on*.*

to'帐号'@'从服务器IP'identifiedby'密码';

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

grantreplication slave

on*.*

to'replication'@'%'identifiedby'sosotest';

这时在mysql库的user表中使用

select*fromuserwhereuser='replication'\G;

可以看到Repl_slave_priv项对就的值为Y。

3.导出主服务器数据

导出主服务器数据,以备之后将其导入从服务器,使主从服务器的初始状态保持一致。

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

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]标签下添加以下面一行:

server-id=id #从机id

实际中,我们添加:

server-id=2

2.导入主机数据库

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

mysql test < test.bak

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

change masterto

master_host = '10.1.146.133',

master_user = 'replication',

master_password = 'sosotest',

master_log_file = 'darkstar-bin.000008',

master_log_pos = 79;

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中有所记录。

附录2

试验环境:

主机  myslq版本 4.1.22

从机 myslq版本 4.0.23a

mysql主从有关参数_mysql主从复制配置相关推荐

  1. mysql主从有关参数_MySQL 主从复制相关参数

    列举了MySQL主从复制主要的相关参数 binlog server_id 服务器在集群中唯一标识符 log_bin[=binlog_name] 启动二进制日志 log_bin_index 二进制日志索 ...

  2. mysql 主从的作用_MySQL主从复制作用和原理

    什么是主从复制 主从复制是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用 做数据的热备 作为后备数据库,主数据库故障后,可切换到从数据库继 ...

  3. mysql主从注意事项_mysql主从复制亲测,以及注意事项

    本人亲测,windows作为mysql主服务器,linux作为从服务器,使用两个linux配置步骤都一样,测一遍而已:区别配置文件在于windwos是my.ini.linux在/etc/my.cof ...

  4. mysql 主从同步检查_MySQL主从复制一致性检测

    在MySQL主从复制过程中,常常需要对某些重要的表进行一致性检查. 由于主从数据在同步时存在一定的延迟,因此直接读取服务器数据的方式无法严格保证信息的一致性.在数据在同步完全结束之前,一直处于不断变化 ...

  5. mysql主从克隆服务器_mysql主从复制服务器配置

    1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修改主服务器master: #vi /etc/my.cnf [mysqld] ...

  6. mysql主从代替技术_mysql主从复制及失败切换

    软件环境: mysql软件包:mysql-5.6.17.tar.gz cmake软件包:cmake-2.8.12.2.tar.gz @  wget http://www.cmake.org/files ...

  7. mysql 主从单表_MySQL主从复制单表或者多表

    MySQL数据库安装不过多的介绍了:必须保证2个数据库的版本一致. 主数据库:192.168.0.43 从数据库:192.168.0.53 修改43主数据库的配置文件: 打开logbin日志生成文件: ...

  8. mysql set 常用参数_mysql常见配置参数

    1max_connectionsMySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量.如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情 ...

  9. mysql主从同步触发器_Mysql 主从复制触发器问题

    Statement-based With statement-based replication, triggers executed on the master also execute on th ...

最新文章

  1. http://udacity.com 和 https://www.udemy.com 请注意区分!
  2. linux脚本:给定目录下所有文件中查找某字符串
  3. iOS之LLVM编译流程和Clang插件开发集成
  4. UVA dp题目汇总
  5. php判断数值大小_php 快速判断一个数字属于什么范围的实现方法
  6. 类与方法java讲解_Java中方法使用的深入讲解
  7. PHP中splice,php中array_splice()函数有什么功能呢?
  8. 阿里图标库的使用方式
  9. 创建三维零件的DH坐标系
  10. 差分管电路图_DIY一款差分输入的晶体管功放电路图
  11. mysql 建表 game_RPG游戏数据库设计
  12. 【人脸表情识别】基于matlab GUI微表情识别系统【含Matlab源码 1852期】
  13. tomcat启动失败:Failed creating java jvm.dll
  14. 罗德里格旋转公式——旋转轴的解法之一
  15. Windows10 磁盘活动时间百分之百导致系统卡顿解决方法
  16. 利用JDBC连接服务器数据库(Android)
  17. 中国建筑玻璃涂料市场深度研究分析报告
  18. 华为云计算机系统是什么,你了解什么是华为云电脑吗,它有什么用
  19. python怎么安装bokeh_安装Bokeh | 交互式数据可视化库Bokeh的安装
  20. UE4/UE5 多线程开发 附件插件下载地址

热门文章

  1. 使用Adreno Profiler分析android游戏
  2. TensorFlow-RNN循环神经网络 Example 2:文本情感分析
  3. CF 717A Festival Organization——斯特林数+递推求通项+扩域
  4. IDEA 工具使用报错总结
  5. 我对C++的一些疑问
  6. php ob缓存原理介绍
  7. MFC可执行文件问题
  8. IPV6 IPV4双栈互通与静态路由
  9. ARP欺骗报文是这个样子的
  10. 1流式细胞术荧光比值计算_流式细胞术技巧攻略!