天天看点

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

高冷的菜单栏

  • 安装MySQL
  • 测试环境介绍
  • 主从备份原理
  • 在A机器中的操作
      • 新建一个测试数据库zengraoli2
      • 新建一个远程用户zeng
      • 配置my.cnf
      • 在MySQL终端查看mater信息
  • 在B机器中的操作
      • 新建数据库zengraoli
      • 配置my.cnf
      • 设置slava信息
  • 进行数据测试
      • 对A机器进行数据的插入
      • 在B机器上查询表中数据是否更新
      • 停用A机器的MySQL,再来看插入
      • 所以简单下一个结论
      • 为什么没有自带的哨兵模式?
  • 一些其他需要到的命令
  • 如果是另一台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) );
           
MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

新建一个远程用户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
           

正常进入,说明创建成功

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

配置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主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

在MySQL终端查看mater信息

show master status;
           
MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

在B机器中的操作

新建数据库zengraoli

并导入刚才的.sql文件

CREATE DATABASE zengraoli2;
USE zengraoli2;
source zengraoli.sql;
           
MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

配置my.cnf

修改my.cnf,

sudo vi /etc/my.cnf

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

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

重启数据库即可生效

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信息如下

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

进行数据测试

对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`;
           

看下以下两条数据,证明已经把数据复制过来了

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

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

在A机器上执行

sudo service mysqld stop

在B中插入数据

SELECT * FROM `test2`;

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台MySQL服务器通过克隆出来

重新打开A上的MySQL,进入MySQL终端,查询一下,第三条数据没有过来

MySQL主从模式安装MySQL测试环境介绍主从备份原理在A机器中的操作在B机器中的操作进行数据测试一些其他需要到的命令如果是另一台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;

再看看从库的信息,可以看到恢复正常了

继续阅读