MySQL主从模式

安装MySQL

请参考网上

测试环境介绍

测试环境为centos7.5

A机器ip:10.0.8.37(主)

B机器ip:10.0.8.243(从)

MySQL版本:5.6.42

主从备份原理

主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句。

本段说明参考:https://www.cnblogs.com/ahaii/p/6307648.html

在A机器中的操作

新建一个测试数据库zengraoli2

CREATE DATABASE zengraoli2;
USE zengraoli2;
CREATE TABLE test2 ( id int not null primary key,name char(20) );

在这里插入图片描述

新建一个远程用户zeng

让这个用户只能操作zengraoli这个数据库的表

CREATE USER 'zeng'@'%' IDENTIFIED BY '123456';
grant all privileges on zengraoli2.* to 'zeng'@'%' identified by '123456'; 
GRANT REPLICATION SLAVE ON *.* TO 'zeng'@'10.0.8.243' IDENTIFIED BY '123456';
flush privileges;

在本机测试一下,看看能否用远程进行链接本地的数据库

mysql -h 10.0.8.37 -u zeng -p

正常进入,说明创建成功
在这里插入图片描述

配置my.cnf

修改my.cnf,sudo vi /etc/my.cnf

找到port=3306这一行,在其下面添加如下内容

server-id=2 # 要与从库不一样
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql # 不同步哪个库 默认是全部
binlog-do-db=zengraoli2 # 只同步哪个库
expire_logs_days        = 10
log-bin=mysql-bin
max_binlog_size   = 100M
binlog_format           = row  # binlog的格式 row 具有 statement和mixed 不具备的优势 填写 row
sync_binlog = 1 
innodb_flush_log_at_trx_commit = 1  # 和 sync_binlog 组成双1 配置 保证数据的完整性

重启数据库即可生效

sudo service mysqld restart

在B机器上没有创建数据库的脚本,所以我们需要先把刚才创建的数据库导出到.sql文件中,在B中导入
在这里插入图片描述

在MySQL终端查看mater信息

show master status;

在这里插入图片描述

在B机器中的操作

新建数据库zengraoli

并导入刚才的.sql文件

CREATE DATABASE zengraoli2;
USE zengraoli2;
source zengraoli.sql;

在这里插入图片描述

配置my.cnf

修改my.cnf,sudo vi /etc/my.cnf

找到port=3306这一行,在其下面添加如下内容
在这里插入图片描述

重启数据库即可生效

sudo service mysqld restart

设置slava信息

进入MySQL的终端,直接干

stop slave;

change master to master_host='10.0.8.37',master_user='zeng',master_password='123456',master_log_file='mysql-bin.000014', master_log_pos=120;

start slave;

master_user要指定能访问的用户名和,master_password则是密码,master_log_file、master_log_pos要对应上面master中显示的

设定完成后,用show slave status\G;查看当前的slave信息如下
在这里插入图片描述

进行数据测试

对A机器进行数据的插入

INSERT INTO `test2`(`id`, `name`) VALUES('1', 'zeng1');
INSERT INTO `test2`(`id`, `name`) VALUES('2', 'zeng2');

SELECT * FROM `test2`;

在B机器上查询表中数据是否更新

use zengraoli2;
SELECT * FROM `test2`;

看下以下两条数据,证明已经把数据复制过来了
在这里插入图片描述

停用A机器的MySQL,再来看插入

在A机器上执行sudo service mysqld stop

在B中插入数据
SELECT * FROM `test2`;
在这里插入图片描述

重新打开A上的MySQL,进入MySQL终端,查询一下,第三条数据没有过来
在这里插入图片描述

所以简单下一个结论

A丢失数据这段时间,无法进行数据的插入,B机器能做的就是A机器崩的时候,可以临时顶替A,然后手工同步数据,再进行切换

为什么没有自带的哨兵模式?

是啊,为什么没有自带的哨兵模式?@MySQL

一些其他需要到的命令

进入本地MySQL之后,要删除用户dog3

use mysql;
select host,user,password from user;
delete from user where user='dog3';

即可完成删除

如果是另一台MySQL服务器通过克隆出来

那么,极有可能因为MySQL的id相同,出现以下问题

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

方法一:修改配置文件,直接修改ID

vim /var/lib/mysql/auto.cnf

方法二:停止从库的mysqld服务,删除他的auto.cnf文件,再启动数据库服务即可

sudo service mysqld stop

mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak

sudo service mysqld start

vi /var/lib/mysql/auto.cnf

show slave status\G;再看看从库的信息,可以看到恢复正常了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值