MySQL数据库集群(一主一从)

数据库集群(一主一从)

环境

注意:重新安装多台的数据库,不要克隆已经安装好的虚拟机。
启动mysql数据库,并且设置为自启动。数据库集群的服务器可以互相通信,关闭掉防火墙,配置好相同的密码。

服务器名称 IP地址
master1 192.168.83.163
slave1 192.168.83.177

在服务器中的/etc/hosts中写入以下内容

192.168.83.163 master1
192.168.83.177 slave1
一主一从(实验1)
  • 主服务器master1
    主服务器和从服务器之间的数据库同步,首先要配置域名解析和IP地址。

准备数据

在主服务器中准备一套数据验证数据同步使用
master1的数据

create database master1db;
create table master1db.master1tab (name char(50));
insert into master1db.master1tab values (111);
insert into master1db.master1tab values (222);

MySQL数据库集群(一主一从)_第1张图片

开启二进制日志功能

在/etc/my.cnf中另起两行中写到:
在master1中写到

log_bin
server-id=1

MySQL数据库集群(一主一从)_第2张图片
文件保存退出
重启数据库

systemctl restart mysqld

主服务器(master1)创建复制用户

root用户登录mysql5.7
MySQL数据库集群(一主一从)_第3张图片
在mysql中创建复制用户

grant replication slave,replication client on *.* to "rep"@"192.168.83.%" identified by "Mysql@123";
# 这里的192.168.83.%表示192.168.83网段中的所有计算机。
flush privileges;# 刷新数据库

备份主服务器的数据库

退出MySQL,在shell中写入以下命令:

mysqldump -p"Mysql@123" --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-test.sql

主服务器将文件转送给从服务器

# 格式:scp -r 主机1:目标文件路径 目标主机2:文件路径(-r表示递归复制整个目录)
scp -r master1:/2021-02-04-mysql-test.sql slave1:/tmp/

在slave1中查看文件,观察二进制日志的分割点:
MySQL数据库集群(一主一从)_第4张图片
回到master1服务器,登录mysql
在测试的表中继续插入数据:

insert into master1db.master1tab values (333);
insert into master1db.master1tab values (444);

插入完成后查看现在的数据:
MySQL数据库集群(一主一从)_第5张图片

  • 从服务器slave1

测试rep用户是否可以使用

mysql -urep -p"Mysql@123" -h master1

MySQL数据库集群(一主一从)_第6张图片

启动服务器序号

vim /etc/my.cnf

MySQL数据库集群(一主一从)_第7张图片
重启slave1的数据库

systemctl restart mysqld

尝试使用自己的root用户和密码登录到数据库中

mysql -uroot -p"Mysql@123"

手动同步数据

登录到slave1的mysql数据库中

# 暂停记录二进制日志
set sql_log_bin=0;
# 手动同步数据
source /tmp/2021-02-04-mysql-test.sql

MySQL数据库集群(一主一从)_第8张图片
可以在slave1的数据库中查看同步的数据
MySQL数据库集群(一主一从)_第9张图片

设置主服务器

在slave1的mysql数据库中设置主服务器

change master to master_host='master1',master_user='rep',master_password='Mysql@123',master_log_file='master1-bin-000006',master_log_pos=154;

启动从服务器

将slave1的mysql数据库设置为奴隶模式

start slave;

查看启动的状态

show slave status\G;
  • 测试是否同步
    可以在master1上的master1db.master1tab中插入数据,在slave1中查看一下验证主从服务器是否同步成功。
一主一从(实验二)
  • 环境
    重置slave1的mysql的环境
systemctl stop mysqld# 暂停数据库服务
rm -rf /var/lib/mysql/*# 删除数据库中的文件
systemctl restart mysqld# 重启数据库程序
grep password /var/log/mysqld.log# 查看默认的密码
mysqladmin -p"默认密码" password "新密码"

使用slave1尝试登录mysql

  • master1主服务器

master1主服务器启动二进制日志的功能,并且编写服务器的ID和GTID

vi /etc/my.cnf

另起两行写到:

gtid_mode=ON
enforce_gtid_consistency=1

MySQL数据库集群(一主一从)_第10张图片

systemctl restart mysqld

授权复制用户rep

grant replication slave,replication client on *.* to "rep"@"192.168.83.%" identified by "Mysql@123";
flush privileges;# 刷新

备份数据

mysqldump -p"Mysql@123" --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
scp master1:/2021-02-05-20-mysql-all.sql   slave1:/tmp/

模拟数据的变化

insert into master1db.master1tab values(888);
  • slave1从服务器

测试rep用户是否是可用状态

mysql -h master1 -urep -p"Mysql@123"

启动二进制日志功能,服务器ID和GTID

vi /etc/my.cnf

MySQL数据库集群(一主一从)_第11张图片
重启数据库

systemctl restart mysqld

手动恢复数据

set sql_log_bin=0;# 设置二进制日志临时关闭
source /tmp/2021-02-05-20-mysql-all.sql

服务器成功的导入到了slave1中。

设置主服务器

change master to master_host="master1",master_user="rep",master_password="Mysql@123",master_auto_position=1;
start slave;# 奴隶模式

可以使用show slave status\G;查看运行状态。
MySQL数据库集群(一主一从)_第12张图片
尝试插入数据来证明是否同步成功。

你可能感兴趣的:(MySQL,mysql)