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查看
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7的主从复制配置步骤如下: 1. 在主库上重启MySQL服务并进入MySQL控制台。创建一个用于从库复制的用户,并为其授权。 ``` CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; ``` 2. 在主库上查看主库参数,记住File和Position对应的参数值,从库需要配置这些参数。 ``` show master status; ``` 3. 在从库上重启MySQL服务并进入MySQL控制台。配置主库参数,将master_log_file设置为主库的File值,将master_log_pos设置为主库的Position值。 ``` change master to master_host='192.168.1.15', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=2336, master_connect_retry=30; ``` 4. 在从库上启动主从复制。 ``` start slave; ``` 5. 查看主从复制状态,确保Slave_IO_Running和Slave_SQL_Running都为Yes。 ``` show slave status \G; ``` 6. 若要修改MySQL配置文件,进入配置文件中的部分,插入或修改以下关键配置: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` 请确保在配置主从复制之前,主库和从库之间可以正常通信,且主库的binlog模式已经开启。当主从复制配置成功后,从库会自动从主库同步数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MySQL 5.7 主从复制](https://blog.csdn.net/MrYang_Wei/article/details/129587645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [MySQL5.7主从复制](https://blog.csdn.net/qq_43681755/article/details/108365639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值