数据库系列课程(01)-MySQL主从复制与数据备份

1.MySQL数据库

MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。

采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有 主从(master slave )复制和主主复制

1.1 主从复制

在MySQL集群环境中,可以分为主节点与从节点,通过主从复制可以实现数据备份、故障转移、MySQL集群、高可用、读写分离等。

MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果

在这里插入图片描述
原理如下:

  1. 从库生成两个线程,一个I/O线程,一个SQL线程;
  2. I/O线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  3. 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
  4. SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

2.主从复制环境配置

首先准备两台服务器:

服务器 ip
主数据库服务器 192.168.162.132
从数据库服务器 192.168.162.133

2.1 安装MySQL

在「192.168.162.132」和「192.168.162.133」上安装MySQL,此处不再详述,参考了文章:

安装完成,均可访问:
在这里插入图片描述

2.2 主MySQL服务器配置

1.配置my.cnf

vi /etc/my.cnf  

新增以下内容:

server_id=132  ###服务器id
log-bin=mysql-bin   ###开启日志文件

在这里插入图片描述
2. 重启mysql服务

service mysqld restart
mysql -u root -p

3. 验证是否已经配置成功
能够查询对应配置文件中的server_id 说明已经配置成功:

show variables like '%server_id%';

在这里插入图片描述
4.能够看到同步的文件,和行数说明已经配置成功

show master status;

在这里插入图片描述

2.3 从MySQL服务器配置

1.配置my.cnf

vi /etc/my.cnf

配置内容如下:

server_id=133  ###从服务器server_id
log-bin=mysql-bin  ###日志文件同步方式
binlog_do_db=test   ###同步数据库

在这里插入图片描述

2.重启mysql服务

service mysqld restart
mysql -u root -p

3.验证是否已经配置成功

能够查询对应配置文件中的server_id 说明已经配置成功

show variables like '%server_id%';

在这里插入图片描述

2.4 主从复制测试

1.从服务器同步主服务器配置

先查看主服务器状态:

show master status;

在这里插入图片描述
从服务器配置主服务器:

CHANGE MASTER TO master_host = '192.168.162.132',
master_user = 'root',
master_password = '123456',
master_log_file = 'mysql-bin.000001',
master_log_pos = 1148;

开始同步:

start slave;

4.查询同步状态

SHOW SLAVE STATUS

显示正在等待主节点发送:
在这里插入图片描述

2. 主服务器创建test数据库,新建表并插入数据:

create database test;

use test;

CREATE TABLE `t_user` (
	`uuid` VARCHAR ( 200 ) NOT NULL,
	`name` VARCHAR ( 50 ) DEFAULT NULL,
	`age` INT ( 11 ) DEFAULT NULL,
	`sex` VARCHAR ( 10 ) DEFAULT NULL,
PRIMARY KEY ( `uuid` ) 
);

INSERT INTO `test`.`t_user`(`uuid`, `name`, `age`, `sex`) VALUES ('0000-0000-0000-0001', 'zhangsan', 18, '0');

INSERT INTO `test`.`t_user`(`uuid`, `name`, `age`, `sex`) VALUES ('0000-0000-0000-0002', 'lisi', 20, '0');

在这里插入图片描述
3.验证

可以看到从服务器192.168.162.133已经从主服务器192.168.162.132里同步内容过来了:
在这里插入图片描述
现在我在主服务器添加一条数据:

INSERT INTO `test`.`t_user`(`uuid`, `name`, `age`, `sex`) VALUES ('0000-0000-0000-0003', 'wangwu', 30, '0');

可以看到从服务器133马上从132同步数据过去了。
在这里插入图片描述
在这里插入图片描述

2.4 注意事项

1. UUID冲突问题

检查从服务器复制功能状态

SHOW SLAVE STATUS

如果在查询的日志中,出现错误:

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.

这是因为服务器克隆的时候交UUID产生了重复

解决办法(删除auto.cnf文件):

cd /var/lib/mysql
rm -rf auto.cnf

然后重启服务器即可:

service mysqld restart

2. 停止同步
另外停止从服务器同步的命令:

stop slave;

总结

在这里插入图片描述

发布了2618 篇原创文章 · 获赞 4883 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/qq_20042935/article/details/103627350
今日推荐