MySQL Replication,主从同步( Master-Slave)配置流程

MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少。


Replication原理

Mysql 的 Replication 是一个异步的复制过程,从一个MySQL节点(称之为Master)复制到另一个MySQL节点(称之Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(SQL 线程和 I/O 线程)在 Slave 端,另外一个线程(I/O 线程)在 Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整个复制过程实际上就是 Slave 从Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

看上去MySQL的Replication原理非常简单,总结一下:

  • 每个从仅可以设置一个主。
  • 主在执行sql之后,记录二进制log文件(bin-log)。
  • 从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。

从这几条Replication原理来看,可以有这些推论:

  • 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
  • 如果主从的网络断开,从会在网络正常后,批量同步。
  • 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
  • 一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。

如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

 

主从配置:

 

实验环境: Master: 192.168.1.250    已经通过源码安装mysqlmysql-5.1.51

                Slave:  192.168.1.128    已经通过源码安装mysqlmysql-5.1.51

   

1. 登陆Master主机,创建mysql 的slave用户

mysql> grant replication slave,reload,super on *.* to slave@192.168.1.128 identified by 'slave';

2. 修改master的mysql配置文件 my.ini 或 my.cnf

server-id=1 #设置 server id

log-bin= mysql-binlog # 打开二进制日志 ,最好放在不同的硬盘上,减小 IO 消耗

expire_logs_day= 1 0 # 设置二进制日志保存日期

max_binlog_size=500M # 设置 每个 binlog 文件的大小

3. 重新启动mysql服务

# service mysql restart

4. 获取相关的db信息, 供slave链接db时使用

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000027 |      183 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

5. 登陆slave 主机,修改my.ini 或 my.cnf 配置文件

server-id=2 # 配置多个从服务器时依次设置 id 号

slave-skip-errors=all # mysql 复制可能出现主服务器上可以运行的语句,从服务器不能够运行,所以我们在 my.cnf 加一句 slave-skip-errors=all 意思是忽略所有的 sql 语句错误!

relay-log= mysql -relay-bin # 该文件用于存放 Slave 端的 I/O 线程从 Master 端读取的二进制文件信息

关闭 binlog 主要考虑到我们使用 Master 的 binlog 进行增量备份,这里就不需要了。

6. 重启mysql 服务后,slave主机登陆mysql,进行slave服务器授权(这之前可以用mysqldump将master数据库导入到slave数据库)

mysql> change master to master_host='192.168.1.250', master_user='slave', master_password='slave',master_log_file='mysql-bin.000027',master_log_pos=183;

7. 启动slave同步。

mysql> start slave;

8. 检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。

mysql> show slave status

这时可以在master数据库新建一个数据库,然后在slave 端show databases; 查看复制是否成功。



9.如果应用中使用了大的blog列或者字符串,那么在从服务器上恢复的时候就会出现‘log event exceeded max_allowed_packet’错误解决如下:
show variables like 'max_allowed_packet';
默认的是1M
set @@global.max_allowed_packet=16777216
设置成16M
10.切换主从服务器:
  假设一台主服务器M,两个从服务器s1,s2!当主服务器出现故障的时候,需要将其中的而一个从数据库服务器(s1)切换成主服务器,同时修改另一个从服务器的配置,使之指向新的主服务器,还要通知应用修改主数据库的ip
下面详细介绍切换主从数据库的步骤:
在s1,s2上(从数据库服务器上):
首先:stop slave TO_THREAD;
然后:show processlist \G
     直到看到状态has read all relay log表示更新执行完毕
在s1上,执行stop slave停止从服务,然后reset master
在s2上,执行stop slave,然后change master to master_host='s1的ip',最后:start slave




转自http://lizhao6210-126-com.iteye.com/blog/1716485


转自http://lizhao6210-126-com.iteye.com/blog/1716485
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值