1

1.1 mysql支持的复制类型:  

  1. 基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。

  2. 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持

  3. 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

1.2 复制的原理

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

  2. slave将master的binary log events拷贝到它的中继日志(relay log);

  3. slave重做中继日志中的事件,将更改应用到自己的数据上。

图片描述

1.该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump
process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

2.复制配置 有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。
3.要点:
负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限。

1.3版本问题

1.主从服务器版本是否一样,尽量保持一下

----------------------------------------分割线---------------------------------------------------------------------------------------------

使用版本 mysql Ver 15.1 Distrib 5.5.50-MariaDB

1、启用二进制日志
vim /etc/my.cnf
log-bin = mysql-bin #二进制日志文件,此项为必填项,否则不能同步数据;
binlog_format = mixed
expire_logs_days = 7
server-id = 1 #这是数据库ID,此ID是唯一的,主库默认为1,其他从库以此ID进行递增,ID值不能重复,否则会同步出错;
sync_binlog = 1 #主从复制时的事务安全
binlog-do-db = mediaman #需要同步的数据库,如果需要同步多个数据库;

2、主服务器---创建同步账号
grant replication slave on . to saas@10.27.177.XX identified by 'XXXXXX';

3、重启mysql,运行 SHOW MASTER STATUS
图片描述

3、从服务器配置
vim /etc/my.cnf
server-id = 2
#relay_log = mysql-relay-bin 默认值 mariadb-relay-bin

4、从服务连接Master服务器
change master to master_host = '10.27.177.XX', master_user = 'saas', master_port=3306, master_password='XXXXX', master_log_file = 'mysql-bin.000112', master_log_pos=278736;

5、在Slave上面启动复制线程:
START SLAVE;
5.1 是否开始复制(都为Yes)为正确
Slave_IO_Running:Yes
Slave_SQL_Running: Yes
SHOW SLAVE STATUSG
图片描述

6、master显示show processlist\G
图片描述

7、slave显示show processlist\G
图片描述

8、设置主从同步--slave_skip_errors

1简介

mysql在主从复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。
slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。

2参数说明

slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster
NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列
errorcode(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
一些error code代表的错误如下:
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1050:数据表已存在,创建数据表失败
1051:数据表不存在,删除数据表失败
1054:字段不存在,或程序文件跟数据库有冲突
1060:字段重复,导致无法插入
1061:重复键名
1068:定义了多个主键
1094:位置线程ID
1146:数据表缺失,请恢复数据库
1053:复制过程中主服务器宕机
1062:主键冲突 Duplicate entry '%s' for key %d
my.cnf中的写法:
slave_skip_errors=1062,1053  
slave_skip_errors=all  
slave_skip_errors=ddl_exist_errors  

pq784844602
27 声望0 粉丝