博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql_replication(主从复制)
阅读量:7014 次
发布时间:2019-06-28

本文共 5228 字,大约阅读时间需要 17 分钟。

hot3.png

                                    mysql_replication(主从复制)

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

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

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

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

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

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

RHEL 6         mysql-5.1.71-1.el6.x86_64

master            172.25.28.7 (vm7)

slave 1              172.25.28.8 (vm8)

mysql AB 复制

: mysql 数据库的版本,两个数据库版本要相同,或者 slave master 版本高!mysql 软件可以在 http://www.mysql.com[/上下载,源码或是 rpm 包都可以,由于 RHEL6 自带

mysql 软件包,直接 yum 安装。

master server 配置:

1)分别在masterslave端安装mysql-server

[root@vm7 ~]# mysql_secure_installation   建议生产环境下设置

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

[mysqld]下添加一下参数

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

binlog-do-db=westos       #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 westos ,再添加一行“binlog-do-db=westos”,以此类推

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

binlog-ignore-db=mysql   #禁止同步 mysql 数据库

2 ) 启动 master

# service mysqld start

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

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

mysql>Flush privileges;

调试:

master 上用下面的命令查看

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000002 |      106 | westos       | mysql            |

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

记录 File Position 的值,下面会用到。

[root@vm7 mysql]# mysqldump -pwestos westos > westos.bak

[root@vm7 mysql]# scp westos.bak 172.25.28.8:   slave上面同步日志文件

slave1server 配置

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

[mysqld]下添加一下参数

server-id=2 #从服务器 ID ,不要和主 ID 相同,如果设置多个从服务器,每个从服务器必 须有一个唯一的 server-id ,必须与主服务器的以及其它从服务器的不相同。 可以认为 server-id 值类似于 IP 地址:这些 ID 值能唯一识别复制服务器群集

中的每个服务器实例。

2 ) 启动 slave

# service mysqld start

3) slave1 上执行一下命令

同时也在slave上面执行mysql_secure_installation

/etc/init.d/mysqld restart

测试slave是否能在远程登陆master:  mysql -uwestos -pwestos -h 172.25.28.7

mysqladmin -pwestos create westos

mysql -pwestos westos < westos.bak

mysql> change master to master_host='172.25.28.7', master_user='westos', master_password='westos', master_log_file='mysql-bin.000002', master_log_pos=106;

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

出现上面两行即成功。

一对多

如果写操作较少,而读操作很多时,可以采取这种结构。你可以将读操作分布到其它的 slave,从而减小master 的压力。但是,slave 增加到一定数量时,slave master 的负载以及网络带宽都会成为一个严重的问题。这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。

相关文件作用:

1. mysql-bin.index:服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index 结尾 的文件。它用于跟踪磁盘上存在哪些二进制日志文件。MySQL 用它来定位二进制日志文件。

2. mysqld-relay-bin.index:该文件的功能与 mysql-bin.index 类似,但是它是针对中继日志,而不是 二进制日志。

3. master.info:保存 master 的相关信息。不要删除它,否则,slave 重启后不能连master

4. relay-log.info:包含 slave 中当前二进制日志和中继日志的信息。

mysql线性结构:vm7(master)->vm8(既充当master也充当slave)->vm1(slave)

当设置 log_slave_updates ,你可以让 slave 扮演其它 slave master。此时,slave SQL 线程执行的事件写进行自己的二进制日志(binary log),然后,其它的 slave 可以获取这些事件并执行它,从而有效缓解master 的压力。

添加一个 slave2:   172.25.28.1 vm1

1. 由于 master 上已经有数据,而新加的 slave2 没有,必须在配置复制前同步数据。

1)master 上执行一下命令

mysql> FLUSH TABLES WITH READ LOCK;   #锁表

mysql> mysqldump --all-databases --lock-all-tables > backup.db

mysql> UNLOCK TABLES;     #表解锁

2)如果你仅使用 MyISAM ,你可以使用 mysqlhotcopy 拷贝,即使服务器正在运行。

# mysqlhotcopy -u root -p westos mysql bakcup

[root@vm1 ~]# vim /etc/my.cnf

server-id=3

vm1执行操作:service mysqld start

[root@vm8 mysql]# vim /etc/my.cnf

server-id=2

log-bin=mysql-bin************************************************表明开启二进制日志文件

binlog-do-db=westos**********************************************表明要记录的是westos

binlog-ignore-db=mysql*******************************************默认监控mysql库(如果不写上面的westos库)

log-slave-updates************************************************生成binary-log文件(此节点既是master也是slave

[root@vm8 mysql]# mysql -pwestos

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

mysql> flush privileges;

[root@vm1 ~]# mysql -uwestos -pwestos -h 172.25.28.8(测试可以远程登陆)

[root@vm7 mysql]# scp mysql-bin.* 172.25.28.1:

[root@vm1 ~]# mysqlbinlog mysql-bin.000001 |mysql -uroot -pwestos

[root@vm1 ~]# mysqlbinlog mysql-bin.000002 |mysql -uroot -pwestos

此时进入vm1的数据库查看,可以看到同步了的数据库内容

[root@vm8 mysql]# mysql -pwestos

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000001 |      348 | westos       | mysql            |

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

1 row in set (0.00 sec)

[root@vm1 ~]# mysql -pwestos

mysql> change master to master_host='172.25.28.8', master_user='westos', master_password='westos',master_log_file='mysql-bin.000001', master_log_pos=348;

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

上面两个线程为yes则说明测试成功

转载于:https://my.oschina.net/u/2368584/blog/481475

你可能感兴趣的文章
更改win7 & Linuxmint双系统安装后更改默认启动顺序
查看>>
使用OpenSSL生成证书-nginx
查看>>
Unity3d之Mecanim(新版动画系统)
查看>>
Rsync原理详解及部署
查看>>
Spring事务传播
查看>>
使用Spark分析拉勾网招聘信息(三): BMR 入门
查看>>
我的友情链接
查看>>
如何通过面试来考核一位前端工程师
查看>>
事件查看器ID 1041
查看>>
HSRP在交换机上实现网关冗余
查看>>
Docker 安装 之 toolbox在Windows下安装Docker)
查看>>
我的友情链接
查看>>
H3C设备之单区域OSPF增强配置
查看>>
使用U盘安装Fedora系统
查看>>
项目:对于windows server R2 (inter)双网卡绑定
查看>>
Linux文件系统修复
查看>>
Struts1.x系列教程(17):使用IncludeAction和ForwardAction类包含和转入Web资源
查看>>
php生成word文档的实例代码
查看>>
Jxl将Excel中的数据写入数据库
查看>>
Spring Boot 之 RestTemplate 网络请求实践
查看>>