linux 之Mysql 同步复制

        MySQL 支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

· 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为份。

· 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

· 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。

MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是有极大帮助.

2 . 环境

RHEL 6.5 mysql5.1.71

Master(A) 172.25.193.11

Slave(B)    172.25.193.12

Slave(C)  172.25.193.13

3. Mysql A B C 复制

 有两种方式:第一种为ABC,即BAslave,也为Cmaster;另一种为ABCmaster,此种情况下,可以做到读写分离,写的操作可以放到A上,读的操作放到BC上,在BC上可以做成负载均衡,A上可以采用高可用HA

下面为AB复制

4配置

master server配置

1)创建同步帐户,并给予权限

mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO Yedda@'172.25.193.12' IDENTIFIED BY

'redhat';

mysql>Flush privileges;

2)配置 /etc/my.cnf 配置文件

[mysqld]下添加一下参数

log-bin=mysql-bin  启动二进制日志系统

binlog-do-db=test  二进制需要同步的数据库名

server-id=1        必须为12321之间的一个正整数值

binlog-ignore-db=mysql 避免同步 mysql 用户配置,以免不必要的

麻烦

3 )service mysqld restart

slave server 配置

1 ) 配置 /etc/ my.cnf 文件

[mysqld]下添加一下参数

server-id=2

master-host=192.168.0.11

master-user=test

master-password=test

master-port=3306

master-connect-retry=60

replicate-ignore-db=mysql

replicate-do-db=test

3 )service mysqld restart

5检测

master上用命令查看


 

slave上执行以下命令

 


 

 

 

如果都是yes ,表示从库的I/O,Slave_SQL线程都正确开启.表明数据库正在同步

你也可以通过在master server上的test库中添加数据,slave server是否同步.

6.双向复制

slave server配置

1 )修改 /etc/my.cnf 文件红字为添加内容 )

  server-id=2从服务器 ID ,不要和主 ID 相同

  master-host=172.25.193.11指定主服务器 IP 地址  

  master-user=test                     制定在主服务器上可以进行同步的用户名

  master-password=123                密码

  master-port=3306                    同步所用的端口

  master-connect-retry=60               断点重新连接时间

  replicate-ignore-db=mysql              屏蔽对 mysql 库的同步

  replicate-do-db=test                    同步数据库名称

  log-bin=mysql-bin                      启动二进制日志系统

  binlog-do-db=test                       设置同步数据库名

  binlog-ignore-db=mysql                 避免同步mysql用户配置,以免不必要的麻烦

2)重新启动 mysql 服务,创建一个同步专用账号

service mysqld restart

mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO test@'192.168.0.11'

IDENTIFIED BY 'test';

mysql>Flush privileges

master server配置

1)修改/etc/my.cnf文件

修改/etc/my.cnf文件(红色为添加部分)

log-bin=mysql-bin    启动二进制日志系统

 

binlog-do-db=test 二进制需要同步的数据库名

 

server-id=1               本机数据库 ID 标示为主

binlog-ignore-db=mysql   避免同步 mysql 用户配置,以免不必要的麻烦

master-host=172.25.193.12 设置从原 slave 数据库同步更新

master-user=test           更新用户

master-password=test      密码

master-port = 3306         端口

replicate-do-db=test        需要更新的库

replicate-ignore-db=mysql  屏蔽对 mysql 库的同步

2) service

mysqld restart

检测

master上用下面的命令查看mysql> show master status;

记录FilePosition的值,下面会用到。

slave上执行以下命令:

mysql> slave stop;

Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_host='192.168.0.12', master_user='test',

master_password='test', master_log_file='mysql-bin.000001',

master_log_pos=98;

Query OK, 0 rows affected (0.28 sec)

 

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

.....

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

.....

如果都是yes ,表示从库的I/O,Slave_SQL线程都正确开启.表明数据库正在同步

你也可以通过phpmyadminmasterslave上的test库中修改数据,看彼此是否同步

7.A-B-C

Bmy.cnf配置文件中要记得在mysqld下加 log_slave_updates,其他配置相同。

数据恢复

shell > cd /var/lib/mysql

查看命令可用:

mysqlbinlog mysql-bin.000001

mysql# mysqlbinlog --start-position=477 --stop-position=580 mysql-bin.000001 | less

回到需要恢复的slave上:

mysqlbinlog --start-position=477 --stop-position=580 mysql-bin.000001 | mysql

或者

master上的mysql-bin.000001直接拷贝到slave的任意目录下即可。

 

前面的环境与接下来的操作会有冲突,所以在安装配置前,请将之前的mysql卸载,

rpm -e mysql-libs --nodeps

master slave上解压安装

tar xf     mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar  

yum  install  -y  *

AB复制方法与之前相同,不再赘述

之前采用的是指定pos号,只要有足够的带宽,io并发复制速度会很快,但是sql线程却只能单线处理,造成了极大的延迟,而新的版本中解决了这个尿点,并且线程多达16个,下面就

来实验一下吧

1)slave server 配置:

vim  /etc/my.cnf

 

mysql> stop slave;

mysql> change master to master_host='172.25.193.2', master_user='Yedda',

Master_password=’Yedda1052*’,master_auto_position=1;

mysql> start slave;

mysql> show slave status\G;

2master server 配置:

vim /etc/my.cnf 

测验

master上插入数据后,在slave

开启的线程可通过以下来查看

mysql> show processlist;

                                                                                                                                                                                                                                                                                         By Yedda

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值