MySQL主从复制与主主复制

数据库 收藏 0 125
FREE VIP 2019-12-31 16:47:52

三台数据库服务器:

               192.168.132.128

               192.168.132.129

               192.168.132.130

1. 主从复制(一主一从)

2. 主从复制(一主多从横向)

3. 主从复制(一主多从纵向)

4. 主主复制(主动模式Master-Master in Active-Active Mode

5. 主主复制(被动模式Master-Master in Active-Passive Mode


主从复制(一主一从)

原理:

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

undefined

1.修改主服务器master192.168.132.128

设置server-id,开启二进制日志

undefined

新建用于同步的账号

mysql> create user lisq@192.168.132.129 identified by '111111';

分配复制权限并刷新

mysql> grant replication slave on *.* to lisq@192.168.132.129;

mysql> flush privileges;

查看

undefined

2. 修改从服务器slave192.168.132.129

Server-id必须唯一

undefined

重启mysql

[root@localhost /]service mysql restart

执行同步sql语句

mysql> change master to master_host='192.168.132.128',master_user='lisq',master_password='111111',master_log_file='mysql-bin.000006',master_log_pos=1088; 

启动slave同步进程

mysql> start slave;

查看slave状态

mysql> show slave status\G;

undefined

测试

undefinedundefined


其他相关参数:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
#不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema

#只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game

 

 如果在从服务器上执行写操作会出现:Slave_SQL_Running: No

解决办法:

从服务器停止同步

mysql> stop slave;

查看煮服务器的File和Position对应的值

mysql> show master status;

在从服务器上手动执行:

mysql> change master to master_host='192.168.132.128',master_user='lisq',master_password='111111',master_log_file='对应值',master_log_pos=对应值;

启动同步

mysql> start slave;

如果出现:Slave_IO_Running: Connecting

查看防火墙及3306端口是否打开

是否赋予了同步权限



主从复制(一主多从1

undefined

基本上重复以上步骤:

第一台从服务器192.168.132.129

mysql> create user lisq@192.168.132.130 identified by '111111';

mysql> grant replication slave on *.* to lisq@192.168.132.130;

mysql> flush privileges;

配置文件加入:log_slave_updates = ON

undefined

第二台从服务器192.168.132.130

Server-id=3

重启mysql

[root@localhost /]service mysql restart

执行同步sql语句

mysql> change master to master_host='192.168.132.129',master_user='lisq',master_password='111111',master_log_file='mysql-bin.000016',master_log_pos=514;

启动 从服务器

mysql>start slave;

查看状态

mysql>show slave status\G;


如果继续添加从服务器同上。。。。。



主从复制(一主多从2

undefined

如果写操作较少,而读操作很时,可以采取这种结构。你可以将读操作分布到其它的slave,从而减小master的压力。但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。

 

主服务器master192.168.132.128

新建用于同步的账号

mysql> create user lisq@192.168.132.130 identified by '111111';

分配复制权限并刷新

mysql> grant replication slave on *.* to lisq@192.168.132.130;

mysql> flush privileges;

第二台从服务器192.168.132.130

同一主一从修改从服务器操作相同



主主复制(主动模式Master-Master in Active-Active Mode

undefined

主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突

修改master192.168.132.128

   修改配置文件:

         #步进值auto_increment_increment。一般有n台主MySQL就填n

         #起始值auto_increment_offset。一般填第n台主MySQL。此时为第一台主MySQL

         192.168.132.128数据库前面已经创建过192.168.132.129同步用户,无需重复创建

         undefined

修改master192.168.132.129

        修改配置文件

        #起始值auto_increment_offset。一般填第n台主MySQL。此时为第二台主MySQL

    undefined

创建192.168.132.128数据库同步账号

mysql> create user lisq@192.168.132.128 identified by '111111';

分配复制权限并刷新

mysql> grant replication slave on *.* to lisq@192.168.132.128;

mysql> flush privileges;

mysql> show master status;

undefined

继续修改master192.168.132.128

mysql> change master to master_host='192.168.132.129',master_user='lisq',

master_password='111111',master_log_file='mysql-bin.000019',master_log_pos=529;

mysql> start slave;

mysql>show slave status\G;


OK测试



主主复制(被动模式Master-Master in Active-Passive Mode

undefined

这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。它的不同点在于其中一个服务只能进行只读操作。

 

是指2台服务器地位一样,但其中一台为只读,并且业务中也只写某1台服务器;如果供写入的服务器出了故障,能迅速的切换到从服务器,或者出于检修等目的,把写入功能切换到另一台服务器也比较方便;

操作:

在其中一台数据库配置文件中加入:read-only=on;

评论
  • 消灭零回复