`

MySQL 5.5 Master/Slave 配置

阅读更多

        在MySQL5.5版本中,引入了半同步复制模式(Semi-synchronous Replication)能够成功避免上述数据丢失的隐患。在这种模式下:master会等到binlog成功传送并写入至少一个slave的delay log之后才会提交,否则一直等待,直到timeout(默认10s)。当出现timeout的时候,master会自动切换半同步为异步,直到至少有一 个slave成功收到并发送Acknowledge,master会再切换回半同步模式。结合这个新功能,我们可以做到,在允许损失一定的事务吞吐量的前 提下来保证同步数据的绝对安全,因为当你设置timeout为一个足够大的值的情况下,任何提交的数据都会安全抵达slave。  

         半同步模式其实是作为MySQL5.5的一个plugin实现的,master和slave使用不同的plugin。默认情况下没有安装该plugin, 官方提供的MySQL Server RPM包默认安装后,会在/usr/lib(64)/mysql/plugin/下面找到该插件。安装完插件之后,还需要手动设置系统参数以开启半同步复 制模式。

 

-------------------------------------------------------------------------------------------------------------------------------------

 

Master 服务器:

 

vi my.cnf
  [mysqld]
  log-bin=NEW_NAME
  server-id=1     #配一个唯一的ID编号,1至32。

#设置要进行或不要进行主从复制的数据库名,同时也要在 Slave 上设定。

  binlog-do-db=数据库名

  binlog-ignore-db=数据库名

 

安装插件

 

mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';

  删除插件是:uninstall plugin PLUGIN_NAME;

mysql>show status;

Rpl_semi_sync_master_clients       0      ##表示有多少slave设置了半同步模式。

Rpl_semi_sync_master_no_tx         0      ##表示没有成功接收slave回执的提交次数

Rpl_semi_sync_master_status        OFF    ##表示当前是异步模式还是半同步模式,设成ON状态,set global rpl_semi_sync_master_enabled=1;

  mysql> SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, 默认是 10s)

 

 mysql> grant replication slave on *.* to NEW_NAME@Slave服务器IP identified by '**';

 mysql> flush tables with read lock;
 mysql> show master status;   #记下现在的日志文件位置。
     显示: saturn-bin.002  106

 


 

 

Slave服务器:

 

vi my.cnf
 [mysqld]
 server-id=2     #也是要唯一。

#设置要进行或不要进行主从复制的数据库名,同时也要在 Master 上设定。

 replicate-do-db=数据库名

 replicate-ignore-db=数据库名

 

安装插件

mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
mysql> change master to master_host='Master服务器IP',master_user='授权用户(不可以是root)',master_password='',master_log_file='saturn-bin.002',master_log_pos=106;

 

设置rpl_semi_sync_slave_enabled =ON,重启才生效 mysql>slave stop;slave start  


检查设置没有问题后,Master服务器:mysql> unlock tables;

 

mysql>show master status \G  #查看Master状态

mysql>show slave status \G   #查看Slave状态

 

-------------------------------------------------------------------------------------------------------------------------------------

 

 

slave 改变同步日志  

 

CHANGE MASTER TO  MASTER_LOG_FILE='binlog.000028',MASTER_LOG_POS=136186441;

 

 

 

slave 改变 MASTER

 

CHANGE MASTER TO MASTER_HOST='station192.example.com',

 

 

-------------------------------------------------------------------------------------------------------------------------------------

 

问题处理记录:

 

1、Slave服务器宕机,导致Slave服务器启动后 show slave status \G 后提示错误

       Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event'

 

解决:

     Master: show master status \G    #记录 Master 以下信息

                  File: mysql-MasterSlave.000006
                  Position: 174367

 

     Slave: slave stop;

                  reset slave;

                  change master to master_host='192.168.1.126',master_user='USER',master_password='PW',master_log_file='mysql-MasterSlave.000006',master_log_pos=174367;

 

     提示:从 Mysql 5.5 开始 Mysql 加入半同步复制,取消了 load data from master 之类的用法,MySQL Slave/Master实例在异常终止恢复之后,MySQL Slave可以处理未完成的或丢弃Master写如log失败数据,从而重新从master上获取源数据,同样,Master 实例重启不会使 Slave 丢失数据。

 

-------------------------------------------------------------------------------------------------------------------------------------

 

Master 同步线程状态


以下列出了master的 Binlog Dump 线程 State 字段中最常见的几种状态。如果在master上没有 Binlog Dump 线程,那么同步就没有在运行。也就是说,没有slave连接上来。
Sending binlog event to slave
    事件是由二进制日志构成,一个事件通常由更新语句加上其他信息。线程读取到一个事件并正发送到slave上。
Finished reading one binlog; switching to next binlog
    读取完了一个二进制日志,正切换到下一个。
Has sent all binlog to slave; waiting for binlog to be updated
    已经读取完全部未完成更新日志,并且全部都发送到slave了。它处于空闲状态,正等待在master上执行新的更新操作以在二进制日志中产生新的事件,然后读取它们。
Waiting to finalize termination
    当前线程停止了,这个时间很短。
   
Slave的线程状态
以下列出了slave的I/O线程 State 字段中最常见的几种状态。从MySQL 4.1.1开始,这个状态在执行 SHOW SLAVE STATUS 语句结果的 Slave_IO_State 字段也会出现。这意味着可以只执行 SHOW SLAVE STATUS 语句就能了解到更多的信息。
Connecting to master
    该线程证尝试连接到master上。
Checking master version
    确定连接到master后出现的一个短暂的状态。
Registering slave on master
    确定连接到master后出现的一个短暂的状态。
Requesting binlog dump
    确定连接到master后出现的一个短暂的状态。该线程向master发送一个请求,告诉它要请求的二进制文件以及开始位置。
Waiting to reconnect after a failed binlog dump request
    如果二进制日志转储(binary log dump)请求失败了(由于连接断开),该线程在休眠时进入这个状态,并定期重连。重连的时间间隔由 --master-connect-retry 选项来指定。
Reconnecting after a failed binlog dump request
    该线程正尝试重连到master。
Waiting for master to send event
    已经连接到master,正等待它发送二进制日志。如果master闲置时,这个状态可能会持续较长时间,如果它等待超过 slave_read_timeout 秒,就会发生超时。这时,它就会考虑断开连接,然后尝试重连。
Queueing master event to the relay log
    已经读取到一个事件,正把它拷贝到中继日志中以备SQL线程处理。
Waiting to reconnect after a failed master event read
    读日志时发生错误(由于连接断开)。该线程在重连之前休眠 master-connect-retry 秒。
Reconnecting after a failed master event read
    正尝试重连到master。当连接确定后,状态就变成 Waiting for master to send event。
Waiting for the slave SQL thread to free enough relay log space
    relay_log_space_limit 的值非零,中继日志的大小总和超过这个值了。I/O线程等待SQL线程先处理中继日志然后删除它们以释放足够的空间。
Waiting for slave mutex on exit
    当前线程停止了,这个时间很短。
Reading event from the relay log
    从中继日志里读到一个事件以备执行。
Has read all relay log; waiting for the slave I/O thread to update it
    已经处理完中继日志中的全部事件了,正等待I/O线程写入更新的日志。
Waiting for slave mutex on exit
    当前线程停止了,这个时间很短。

 

-------------------------------------------------------------------------------------------------------------------------------------

 

附 Last_SQL_Errno 错误代码说明:

 

1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
1235:MySQL版本过低,不具有本功能

 

分享到:
评论

相关推荐

    mysql5.5 master-slave(Replication)配置方法

    mysql5.5 master-slave(Replication)配置方法,需要的朋友可以参考下。

    mysql5.5 master-slave(Replication)主从配置

    一主一从: Master: OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.2 Slave: OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.3 修改主机Master配置文件 (/etc/my.cnf) 代码如下: [mysqld] //至少要有...

    mysql5.6-5.5主从备份

    mysql5.6-5.5主从备份 A服务器(主服务器Master):9.1.6.217 mysql:5.6 redhat5.8 B服务器(从服务器Slave):localhost mysql:5.5 win10

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    第一部分 mysql5.5 新特性篇 第1章 mysql5.5介绍 2 1.1 性能上的显著改变 2 1.1.1 mysql5.5默认存储引擎的调整 2 1.1.2 充分利用cpu多核的处理能力 7 1.1.3 提高刷新脏页数量和合并插入数量,改善磁盘i/o处理...

    step by step配置mysql复制的具体方法

    采用全库复制的方案,方便管理mysql 5.5 + rhel5.810.4.11.12 master10.4.11.13 slave—Master端设置1, 创建复制帐号,需要复制和slave权限mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@...

    深入解析半同步与异步的MySQL主从复制配置

    这里我以MySQL5.5为例来说一下MySQL的主从复制的原理: 首先由备节点的I/O线程负责向主节点请求数据,主节点验证通过以后会由dump线程把数据发送给备用节点。备用节点的I/O线程收到资源后会把把这些数据写入到中继...

    MySQL slave_net_timeout参数解决的一个集群问题案例

    2015-02-03 15:44:51 19633 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and ...

    运河:阿里巴巴MySQL binlog增量订阅和消费组件

    简介 canal [kə'næl] ,译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费 从2010年开始,业务逐步尝试数据库日志解析获取...MySQLslave将master的二进制日志事件复制到它的中

    单点登录源码

    ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── zheng-upms-common -- upms系统公共模块 | ├── zheng-upms-dao -- 代码生成模块,无需开发 | ├── zheng-upms-...

Global site tag (gtag.js) - Google Analytics