Linux:Mysql5.7的主从复制,半同步

Mysql主从复制

master将改变记录到二进制日志中binlog,slave将master的binlog拷贝到自己的中继日志中,然后执行一遍sql语句就达到同步了
一个服务器当主库,另一个或多个服务器当从库,主库会把对数据库的修改操作(新增 删除
修改)记录在binlog日志中,从库连接主库获取主库的binlog,并记录在中继日志relay-log中,然后从上次记住的位置起执行SQL语句,一旦遇到错误则停止同步

Mysql主从复制的实现原理图

这里写图片描述

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

一·主从服务器的安装包

[root@server1(2) ~]# ls
mysql-community-client-5.7.17-1.el6.x86_64.rpm
mysql-community-common-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm
mysql-community-server-5.7.17-1.el6.x86_64.rpm
[root@server1(2) ~]# yum install -y *.rpm

二·主数据库master修改

1·修改配置文件

[root@server1 ~]# vim /etc/my.cnf    ##添加以下内容
server-id=1     #设置serverid,这是mysql主从复制是一个很重要的标识
log-bin=mysql-bin   #启动二进制日志系统
[root@server1 ~]# /etc/init.d/mysqld start    ##开启服务

2·更改密码

[root@server1 ~]# grep password /var/log/mysqld.log   ##过滤密码,查看原始密码
[root@server1 ~]# mysql_secure_installation    ##更改密码
# 设置新密码时,必须含有大小写字母,特殊字符和数字,不少于8个字符

3·登陆mysql
主服务器授权

[root@server1 ~]# mysql -uroot -p
mysql> grant replication slave on  *.*  to  repl@'172.25.41.%' identified by 'Redhat!123';   ##授权
mysql> show databases;   ##显示
mysql> show master status;   ##查看状态

这里写图片描述

三·从服务器slave修改

1.修改配置文件

[root@server2 ~]# vim /etc/my.cnf   ##添加以下内容
server-id=2     #设置serverid
[root@server2 ~]# /etc/init.d/mysqld start    ##开启服务

2从服务器授权

[root@server2 ~]# mysql -p
mysql> change master to master_host='172.25.71.1', master_user='repl', master_password='Redhat!123', master_log_file='mysql-bin.000003', master_log_pos=1003;
mysql> start slave;    #启动slave同步进程
mysql> show slave status\G;  #查看状态

这里写图片描述

四·同步复制

1.普通主从服务器复制

[root@server1 ~]# mysql -p   ##在主服务器建立用户
mysql> create database test;   ##建立库
mysql> use test  ## 进入库
mysql> create table userlist (
    -> username varchar(15) not null,
    -> password varchar(25) not null);
mysql> desc userlist;
mysql> insert into userlist values ('user1','123');    ##添加用户
mysql> insert into userlist values ('user2','456');
mysql> insert into userlist values ('user3','789');

这里写图片描述

在从服务器查看

[root@server2 ~]# mysql -p 
mysql> use test
mysql> select * from userlist;

这里写图片描述

2.gtid主从复制

(1)主从服务器修改配置文件

[root@server1(2) ~]# vim /etc/my.cnf    ##添加以下内容
gtid_mode=ON
enforce-gtid-consistency=true
[root@server1(2) ~]# /etc/init.d/mysqld restart

(2)主服务器

[root@server1 ~]# mysql -p
mysql> show master status;   #查看状态

这里写图片描述

(3)从服务器

[root@server2 ~]# mysql -p
mysql> stop slave;   #停止slave同步进程
mysql> change master to master_host='172.25.41.1', master_user='repl', master_password='Redhat!123', MASTER_AUTO_POSITION=1;
mysql> start slave;   #启动slave同步进程
mysql> show slave status\G;   ##查看状态

这里写图片描述

(4)测试
主服务器删除用户:

[root@server1 ~]# mysql -p
mysql> use test
mysql> show tables;
mysql> delete from userlist where username='user3';

这里写图片描述

从服务器查看:

[root@server2 ~]# mysql -p
mysql> use test
mysql> select * from userlist;

这里写图片描述

五·一主两从:(既可以做从也可以做主)

server1:master
server2:master,slave
server3:slave

[root@server1 ~]# mysqldump -pRedhat\!123 test > test.sql
[root@server1 ~]# scp test.sql  server3:
[root@server3 ~]# vim test.sql 
create database test;
use test;
[root@server3 ~]# /etc/init.d/mysqld restart
[root@server3 ~]# mysql -p test < test.sql 
[root@server3 ~]# mysql -p
mysql> change master to  master_host='172.25.41.2', master_user='repl', master_password='Redhat!123', master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;

这里写图片描述

[root@server2 ~]# vim /etc/my.cnf    ##添加以下内容
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
[root@server2 ~]# /etc/init.d/mysqld restart

这里写图片描述

六·半同步复制

1.主服务器设置【server1】


mysql> INSTALL PLUGIN  rpl_semi_sync_master  SONAME 'semisync_master.so';  #安装插件
mysql> show global variables like '%semi%';   #环境变量
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |  (是否启动半同步功能) 
| rpl_semi_sync_master_timeout       | 10000 |  (连接从节点的超时时间)
| rpl_semi_sync_master_trace_level   | 32    |(是否检测半同步从节点上线)
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=2000;

这里写图片描述

2.从服务器设置【server2】

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show global variables like '%semi%';
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;

这里写图片描述

3.在主服务器验证半同步

mysql> show global status like '%semi%';

这里写图片描述

重启从上的IO线程
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。
当我们在server1删除user2.在server2查看:

4.从服务器配置

mysql> delete  from userlist where username='user2';

主服务器查看:这里写图片描述

测试:

(1)
在server1建立用户
这里写图片描述
在server2查看
这里写图片描述
在server3从服务查看同步
这里写图片描述

(1)
在server2 关闭IO

mysql> STOP SLAVE IO_THREAD;

在server1建立用户

mysql> insert into userlist values ('user6','444');

在server3查看不到建立的用户
在server2打开IO,才会看到

mysql> START SLAVE IO_THREAD;

server3查看
这里写图片描述

Linux MySQL 5.7主从配置是一种常用的数据库架构,用于提高数据库的可用性和性能。在主从配置中,一个MySQL服务器充当主服务器,负责处理写操作和更新数据,而其他MySQL服务器充当从服务器,负责复制主服务器上的数据并处理读操作。 以下是Linux MySQL 5.7主从配置的步骤: 1. 安装MySQL:在Linux服务器上安装MySQL 5.7版本,并确保主从服务器上都安装了相同版本的MySQL。 2. 配置主服务器:在主服务器上进行以下配置: - 打开MySQL配置文件(一般位于/etc/mysql/my.cnf)。 - 设置server-id参数,为主服务器分配一个唯一的ID号。 - 启用二进制日志(binlog),以记录所有的写操作。 - 重启MySQL服务使配置生效。 3. 创建复制用户:在主服务器上创建一个用于复制的用户,并为其授予复制权限。 4. 备份主服务器数据:在主服务器上执行数据库备份操作,以便在从服务器上进行初始化。 5. 配置从服务器:在从服务器上进行以下配置: - 打开MySQL配置文件。 - 设置server-id参数,为从服务器分配一个唯一的ID号。 - 配置主服务器的连接信息,包括主服务器的IP地址、复制用户和密码。 - 启动从服务器,并连接到主服务器进行数据复制。 6. 同步数据:从服务器连接到主服务器后,会自动开始复制主服务器上的数据。可以使用SHOW SLAVE STATUS命令来查看复制状态。 7. 测试主从配置:在主服务器上进行写操作,并在从服务器上进行读操作,以确保主从复制正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值