Mysql单体服务实现数据备份,主从复制,集群。

Linux(Centos7.6)

1. Mysql(5.7.32.0)单体服务实现数据备份

1.1 在Linux上安装Mysql服务

1.1.1 先检查Linux已经安装了mysql
rpm -qa|grep mysql

在这里插入图片描述空白说明没有安装mysql

1.1.2 查询Linux是否带有玛利亚数据库有则删除,删除etc目录下的my.cnf
rpm -qa|grep mari
rpm -e --nodeps mariadb-libs
rpm -e --nodeps marisa

在这里插入图片描述
2.删除etc目录下的my.cnf ,一定要删掉,等下再重新建,之前我将就用这个文件,后面改配置各种不生效,没有my.cnf文件,没有执行可命令

rm /etc/my.cnf

在这里插入图片描述

1.1.3 检查有无安装过mysql 用户组,没有的话创建

1.检查mysql 用户组是否存在

cat /etc/group | grep mysql
cat /etc/passwd |grep mysql

在这里插入图片描述
2.创建mysql 用户组和用户

groupadd mysql
useradd -r -g mysql mysql

在这里插入图片描述

1.1.4 新建文件夹 /data/program,/data/software,/data/work,/data/lost+found, 并cd进入
mkdir /data
mkdir /data/program
mkdir /data/software
mkdir /data/work
mkdir /data/lost+found
cd /data/software

在这里插入图片描述

1.1.5 下载mysql-5.7.32-1.el7.x86_64.rpm-bundle

https://downloads.mysql.com/archives/community/
注意:下载的文件为.tar后缀名,lz将这个文件先在Linux中解压了一道生成了tar.gz后缀的文件
再将次文件转移到Windows,然后将Linux中的两个文件删除,再从Windows将tar.gz后缀的文件转移到Linux中方便演示
使用xftp7上传安装到/data/software
在这里插入图片描述

1.1.6 解压文件mysql-5.7.32-1.el7.x86_64.rpm-bundle到/data/program
tar -zvxf mysql-5.7.32-linux-glibc2.12-x86_64.tar -C /data/program

在这里插入图片描述

1.1.7 修改文件名及其权限

1.修改文件名

cd /data/program
mv mysql-5.7.32-linux-glibc2.12-x86_64/ mysql-5.7.32

2.更改mysql5.7 目录下所有文件夹所属的用户组、用户以及权限

chown -R mysql:mysql /data/program/mysql-5.7.32
chmod -R 777 /data/program/mysql-5.7.32

在这里插入图片描述
3.进入/data/program/mysql-5.7.32/bin目录

cd /data/program/mysql-5.7.32/bin
1.1.8 编译安装并初始化mysql(初始化时会初始化一个密码务必记住红框中的密码)
./mysqld --initialize --user=mysql --datadir=/data/program/mysql-5.7.32/data --basedir=/data/program/mysql-5.7.32

在这里插入图片描述

1.1.9 编写etc目录下的my.cnf 配置文件,并添加配置
vi /etc/my.cnf
#下面为文件具体内容
[mysqld]
datadir=/data/program/mysql-5.7.32
datadir=/data/program/mysql-5.7.32/data
#socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/data/program/mysql-5.7.32/data/mysql.log
pid-file=/data/program/mysql-5.7.32/data/mysql.pid

[client]
port=3306
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

2.授予my.cnf 配置文件775权限

chmod -R 775 /etc/my.cnf

3.修改 /data/program/mysql-5.7.32/support-files/ 目录下的mysql.server文件,如下图中5个位置的 /usr/local/mysql 全部修改成 /data/program/mysql-5.7.32,因为没有安装下 /usr/local/mysq 目录下,所以需要修改安装的 /data/program/mysql-5.7.32 目录
在这里插入图片描述

1.1.10 启动mysql 服务器

1.查询服务

ps -ef|grep mysql
ps -ef|grep mysqld

2.创建 my.cnf.d目录

mkdir /etc/my.cnf.d/

3.启动服务

/data/program/mysql-5.7.32/support-files/mysql.server start

4.建立链接
1.由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/data/server/mysql-5.7.33/bin/mysql,我们则可以这样执行命令:

ln -s /data/program/mysql-5.7.32/bin/mysql /usr/bin

在这里插入图片描述

1.1.11 登录Mysql,设置Mysql相关设置

1.登录mysql ,密码就是初始化时生成的临时密码,修改密码为java123456

mysql -uroot -p
set password for root@localhost = password('java123456');

在这里插入图片描述

2.开放远程连接

use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;

在这里插入图片描述
3.设置开机自启

//将服务文件拷贝到init.d下,并重命名为mysql
cp /data/program/mysql-5.7.32/support-files/mysql.server /etc/init.d/mysqld
//赋予可执行权限
chmod +x /etc/init.d/mysqld
//添加服务
chkconfig --add mysqld
//显示服务列表
chkconfig --list

在这里插入图片描述
4.开放3306端口,测试本地客户端是否连接成功

//开放3306端口命令
firewall-cmd --zone=public --add-port=3306/tcp --permanent
//配置立即生效
firewall-cmd --reload

在这里插入图片描述

1.2 完全备份一个或多个完整的库(包括其中所有的表)(手动操作)

1.2.1 备份数据库到某一个sql文件中
mysqldump -uroot -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql
mysqldump -uroot -p --databases liu > /opt/kgc.sql       #备份一个kgc库
mysqldump -uroot -p --databases mysql li > /opt/mysql-kgc.sql    #备份mysql与 kgc两个库
mysqldump -uroot -p[密码] --all-databases > /备份路径/备份文件名.sql    #备份所有的库
1.2.2 例如:备份Test数据库到 /data/program/mysql-5.7.32/data/fullbackup中
# 建立mysqldump命令的连接
ln -s  /data/program/mysql-5.7.32/bin/mysqldump /usr/bin

mkdir /data/program/mysql-5.7.32/data/fullbackup
mysqldump -uroot -pjava123456 --databases test > /data/program/mysql-5.7.32/data/fullbackup/member-test.sql

在这里插入图片描述

1.2.3 模拟数据丢失并恢复数据

1.数据丢失

drop database test;
show databases;

在这里插入图片描述
2.恢复数据

source /data/program/mysql-5.7.32/data/fullbackup/member-test.sql

在这里插入图片描述

1.2.4 完全备份数据库中的表到某一个sql文件中
mysqldump -u root -p[密码] 库名 [表名1] [表名2]> /备份路径/备份文件名.sql
 
如:
mysqldump -uroot -p[密码] [-d] HUISUO member1 > /opt/member1.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d”选项,说明表数据也进行备份
1.2.5 例如:备份Test数据库中的backer_menu_tab到 /opt/member-backermenutab.sql中
mysqldump -u root -pjava123456 test backer_menu_tab > /data/program/mysql-5.7.32/data/fullbackup/member-backermenutab.sql

在这里插入图片描述

1.2.6 模拟数据库中的表的数据丢失并恢复数据

1.数据丢失

drop tables backer_menu_tab;
show tables;

在这里插入图片描述
2.数据恢复

source /data/program/mysql-5.7.32/data/fullbackup/member-backermenutab.sql

在这里插入图片描述
在这里插入图片描述

1.3 增量备份与恢复(手动操作)

1.3.1 增量备份需要开启二进制日志功能
mkdir /data/program/mysql-5.7.32/data/binarylog
cd /data/program/mysql-5.7.32/data/binarylog
vim /etc/my.cnf
log-bin=/data/program/mysql-5.7.32/data/binarylog/mysql-bin
server-id=1
binlog_format=ROW
expire_logs_days = 7 #保留七天的日志

 #重启服务
systemctl restart mysql

在这里插入图片描述

1.3.2 先完成完全备份
# 建立mysqldump命令的连接
ln -s  /data/program/mysql-5.7.32/bin/mysqldump /usr/bin

mysqldump -uroot -p [数据库] [] > /mnt/meeting_working_$(date +%F).sql
mysqldump -uroot -p [数据库] > /mnt/meeting_$(date +%F).sql
# 建立mysqladmin命令的连接
ln -s  /data/program/mysql-5.7.32/bin/mysqladmin /usr/bin
#生成二进制文件
mysqladmin -uroot -p flush-logs

在这里插入图片描述
每天进行增量备份操作,生成新的二进制日志文件(例如 mysql-bin.000001)

cd /data/program/mysql-5.7.32/data/binarylog
ll

在这里插入图片描述

1.3.3 插入新数据,以模拟数据的增加或更改

在这里插入图片描述
1.再次生成新的二进制日志文件(例如 mysql-bin.000002)

mysqladmin -u root -p flush-logs
ll

在这里插入图片描述
2.再次生成新的二进制日志文件(例如mysql -bin.000003)

##之前的的数据库操作会保存到mysql-bin.000002文件中,之后数据库数据再发生变化则保存在mysql-bin.00003文件中
mysqladmin -u root -p flush-logs
ll

在这里插入图片描述

1.3.4 删除新插入的数据再恢复

在这里插入图片描述
在这里插入图片描述
1.使用生成新的二进制日志文件mysql-bin.000001恢复数据

# 建立mysqlbinlog命令的连接
ln -s  /data/program/mysql-5.7.32/bin/mysqlbinlog /usr/bin
mysqlbinlog --no-defaults /data/program/mysql-5.7.32/data/binarylog/mysql-bin.000001 | mysql -uroot -pjava123456

在这里插入图片描述
在这里插入图片描述

增量备份总结:

为什么选择mysql-bin.000001恢复数据,在表创建好,第一次数据插入之后,我们手动生成mysql-bin.000001文件,此时文件中会不断记录在生成文件之后数据库所发生的插入记录,由上面例子发现第二次插入数据60和61之后手动生成了mysql-bin.000002,所以mysql-bin.000001文件中只记录了60和61的数据插入,在生成了mysql-bin.000002文件之后又马上手动生成了mysql-bin.000003文件,所以mysql-bin.000002文件没有记录新增记录,而后发生的新增记录会存储在mysql-bin.000003文件,直到再次手动生成mysql-bin.000004文件,mysql-bin.000003文件就不会再记录新增记录。如果再插入数据63,新增记录63会存储在mysql-bin.000003文件中,再次手动生成mysql-bin.000004文件,mysql-bin.000003文件就不会再记录新增记录。如果60,61,63数据全部丢失不能直接用mysql-bin.000003恢复这会导致错误,必须从储存了新增数据60,61的mysql-bin.00000X的文件开始一个一个往后恢复,这里我们选择从mysql-bin.000001文件->mysql-bin.000002文件->mysql-bin.000003文件

1.4 完全备份一个或多个完整的库(定时任务)

1.4.1 在/root/script下创建test_db_fullbackup.sh脚本
mkdir /root/script
cd /root/script
[root@mysql ~] vim test_db_fullbackup.sh
#!/bin/sh
# Name:test_db_fullbackup.sh
# 定义数据库目录
mysqlDir=/data/program/mysql-5.7.32
# 定义用于备份数据库的用户名和密码
user=root
userpwd=java123456
dbname=test
# 定义备份目录
databackupdir=/data/program/mysql-5.7.32/data/fullbackup
[ ! -d $databackupdir ] && mkdir $databackupdir
# 定义邮件正文文件
emailfile=$databackupdir/email.txt
# 定义邮件地址
email=root@localhost.localdomain
# 定义备份日志文件
logfile=$databackupdir/mysqlbackup.log
DATE=`date -I`
echo "" > $emailfile
echo $(date +"%y-%m-%d %H:%M:%S") >> $emailfile
cd $databackupdir
# 定义备份文件名
dumpfile=mysql_${dbname}_${DATE}.sql
gzdumpfile=mysql_${dbname}_${DATE}.sql.tar.gz
# 使用mysqldump备份数据库,请根据具体情况设置参数
$mysqlDir/bin/mysqldump -u$user -p$userpwd --flush-logs -x $dbname > $dumpfile 
# 压缩备份文件
if [ $? -eq 0 ]; then
 tar czf $gzdumpfile $dumpfile >> $emailfile 2>&1
 echo "BackupFileName:$gzdumpfile" >> $emailfile
 echo "DataBase Backup Success!" >> $emailfile
 rm -f $dumpfile
else
 echo "DataBase Backup Fail!" >> $emailfile
fi
# 写日志文件
echo "--------------------------------------------------------" >> $logfile
cat $emailfile >> $logfile
# 发送邮件通知
cat $emailfile | mail -s "MySQL Backup" $email
1.4.2 添加定时任务
#给脚本文件加权限
chmod 777 /root/script/test_db_fullbackup.sh
#安装crontab
yum install crontabs
#每12个小时执行一次
crontab -e
* 0 */12 * * * root /root/script/test_db_fullbackup.sh >/dev/null 2>&1
1.4.3 启动定时任务
systemctl start crond.service

1.5 增量备份(定时任务)

1.5.1 在/root/script下创建test_db_incrementalbackup.sh脚本
mkdir /root/script
cd /root/script

vim test_db_incrementalbackup.sh
#!/bin/sh
# Name:mysqlDailyBackup.sh
# 定义数据库目录和数据目录
mysqldir=/data/program/mysql-5.7.32
datadir=$mysqldir/data/binarylog
# 定义用于备份数据库的用户名和密码
user=root
userpwd=java123456
# 定义备份目录,每日备份文件备份到$dataBackupDir/daily
databackupdir=/data/program/mysql-5.7.32/data/binarylog
dailybackupdir=$databackupdir/daily
[ ! -d $dailybackupdir ] && mkdir -p $databackupdir/daily
# 定义邮件正文文件
emailfile=$databackupdir/email.txt
# 定义邮件地址
email=root@localhost.localdomain
# 定义日志文件
logfile=$databackupdir/mysqlbackup.log
echo "" > $emailfile
echo $(date +"%y-%m-%d %H:%M:%S") >> $emailfile
#
# 刷新日志,使数据库使用新的二进制日志文件
$mysqldir/bin/mysqladmin -u$user -p$userpwd flush-logs
cd $datadir
# 得到二进制日志列表
filelist=`cat mysql-bin.index`
icounter=0
for file in $filelist
do
 icounter=`expr $icounter + 1` 
done
nextnum=0
ifile=0
for file in $filelist
do
 binlogname=`basename $file`
 nextnum=`expr $nextnum + 1`
# 跳过最后一个二进制日志(数据库当前使用的二进制日志文件)
 if [ $nextnum -eq $icounter ]; then
 echo "Skip lastest!" > /dev/null
 else
 dest=$dailybackupdir/$binlogname
# 跳过已经备份的二进制日志文件
 if [ -e $dest ]; then
 echo "Skip exist $binlogname!" > /dev/null
 else
# 备份日志文件到备份目录
 cp $binlogname $dailybackupdir
 if [ $? -eq 0 ]; then
 ifile=`expr $ifile + 1`
 echo "$binlogname backup success!" >> $emailfile
        fi
    fi
 fi
done
if [ $ifile -eq 0 ];then
 echo "No Binlog Backup!" >> $emailfile
else
 echo "Backup $ifile File(s)." >> $emailfile
 echo "Backup MySQL Binlog OK!" >> $emailfile
fi
# 发送邮件通知
cat $emailfile | mail -s "MySQL Backup" $email
# 写日志文件
echo "--------------------------------------------------------" >> $logfile
cat $emailfile >> $logfile
#删除七天之前的文件
find /data/program/mysql-5.7.32/data/binarylog -mtime +7 -name "*.*" -exec rm -Rf {} \;




1.5.2 添加定时任务
#给脚本文件加权限
chmod 777 /root/script/test_db_incrementalbackup.sh
#安装crontab
yum install crontabs
#每2个小时执行一次
crontab -e
* 0 */2 * * * root /root/script/test_db_fullbackup.sh >/dev/null 2>&1
1.5.3 启动定时任务
systemctl start crond.service

2.Mysql(5.7.32.0)主从复制

2.1 Docker 安装模拟 MySQL 主从复制集群

2.1.1 CentOS(7.6)安装Docker

1.卸载之前的版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2.安装docker

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

3.然后更新本地镜像源

        # 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

4.然后输入命令

yum install -y docker-ce
2.1.2 启动docker

1.启动docker前,一定要关闭防火墙后!!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
#查看是否关闭防火墙
systemctl status firewalld

2.通过命令启动docker:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

当出现active(running)时,即为启动成功,如图:
在这里插入图片描述

3.输入命令,可以查看docker版本

docker -v
2.1.3 配置镜像加速

1.通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://kijci2ba.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.1.4 Docker 安装模拟 MySQL 主从复制集

1.下载 mysql 镜像

docker pull mysql:5.7
  1. 创建 Master 实例并启动
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

3.修改 master 基本配置

vim /mydata/mysql/master/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

注意: skip-name-resolve 一定要加, 不然连接 mysql 会超级慢
4.添加 master 主从复制部分配置

#为my.cnf写入一下配置
server_id=1                 #指定集群id
log-bin=mysql-bin         #打开二进制日志功能
read-only=0               #关闭只读,可读可写
binlog-do-db=gulimall_ums    #指定mysql的binlog日志记录哪个db
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
replicate-ignore-db=mysql  #用来设置不需要同步的库,此处指定的mysql系统库
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

5.重启master

docker restart mysql-master

6.创建 Slaver-01实例并启动

docker run -p 3317:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver/log:/var/log/mysql \
-v /mydata/mysql/slaver/data:/var/lib/mysql \
-v /mydata/mysql/slaver/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

7.修改 slaver-01基本配置

vim /mydata/mysql/slaver/conf/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

8.添加 slaver-01 主从复制部分配置

vim /mydata/mysql/slaver/conf/my.cnf
server_id=2                  #注意此处id不能与主节点相同
log-bin=mysql-bin
#是否只读,1 代表只读,0 代表读写
read-only=1
#binlog-do-db配置了哪些数据库需要主从复制
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
binlog-do-db=Test
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

9.重启slaver-01

docker restart mysql-slaver-01

10.Docker 服务器、Mysql容器设置自动启动

查看已启动的服务
systemctl list-units --type=service
查看是否设置开机启动
systemctl list-unit-files | grep enable
设置开机启动
systemctl enable docker.service
关闭开机启动
systemctl disable docker.service
#查看docker是否设置开机启动
systemctl list-unit-files | grep enable | grep docker
#设置启动docker时,mysql自启动
docker update mysql-slaver-01 --restart=always
docker update mysql-master --restart=always

11.为 master 授权用户来他的同步数据
(1)进入docker容器

docker exec -it mysql-master /bin/bash

(2) 进入mysql内部

mysql –uroot -p
Enter password:root

(3) 授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

(4) 添加用来同步的用户

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
#backup为账号名,
#123456为账号密码

(5) 查看master状态
在这里插入图片描述
12.为 slaver-01授权用户来他的同步数据
(1) 进入docker容器

docker exec -it mysql-slaver-01 /bin/bash

(2) 进入mysql内部

mysql –uroot -p
Enter password:root

(3) 授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

(4) 设置主库连接

change master to master_host='192.168.200.128',master_user='backup',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=0,master_port=3307;
#master_host:主节点虚拟机ip
#master_user:用于连接主机的集群账号
#master_password:用于连接主机的集群密码
#master_log_file必须与2.1.4.11 (5)的File字段一致,Position不用一致后面会自动同步

(5) 启用主从同步

start slave;

(6) 查看从库状态

#slaver01的端口号为docker run -p 3317:3306 --name mysql-slaver-01 \ 创建实例中的3317
show slave status

在这里插入图片描述

2.1.5 主从同步测试

1.主节点新建数据库gulimall_admin,从机刷新后也有相同数据库,只要此处同步其实就代表成功了
在这里插入图片描述
2.在主节点执行下面文件

DROP TABLE IF EXISTS `backer_menu_tab`;
CREATE TABLE `backer_menu_tab`  (
  `menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限Id',
  `parent_id` int(11) NOT NULL COMMENT '父级权限Id,第一级权限值为0',
  `menu_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限名称',
  `menu_sign` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限标识符',
  `menu_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限路径',
  `add_time` datetime(0) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`menu_id`) USING BTREE,
  UNIQUE INDEX `menu_sign`(`menu_sign`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of backer_menu_tab
-- ----------------------------
INSERT INTO `backer_menu_tab` VALUES (1, 0, '报警模块', 'alarm', '/alarm', '2023-03-26 20:46:17');
INSERT INTO `backer_menu_tab` VALUES (2, 0, '管理员模块', 'backer', '/backer', '2023-03-26 20:47:19');
INSERT INTO `backer_menu_tab` VALUES (3, 0, '设备模块', 'device', '/device', '2023-03-26 20:47:48');
INSERT INTO `backer_menu_tab` VALUES (4, 0, '记录模块', 'log', '/log', '2023-03-26 20:48:12');
INSERT INTO `backer_menu_tab` VALUES (5, 1, '报警模块-报警记录', 'alarm-1', '/alarm/alarm', '2023-03-26 20:48:50');
INSERT INTO `backer_menu_tab` VALUES (6, 5, '报警模块-报警记录-清理设备线路异常', 'alarm-1-1', '/alarm/alarm/handle', '2023-03-26 20:49:15');
INSERT INTO `backer_menu_tab` VALUES (7, 5, '报警模块-报警记录-清理设备全部异常', 'alarm-1-2', '/alarm/alarm/handleByDeviceId', '2023-03-26 20:49:40');
INSERT INTO `backer_menu_tab` VALUES (8, 5, '报警模块-报警记录-查询设备警报条数', 'alarm-1-3', '/alarm/alarm/countAlarm', '2023-03-26 20:50:06');
INSERT INTO `backer_menu_tab` VALUES (9, 5, '报警模块-报警记录-获取报警记录', 'alarm-1-4', '/alarm/alarm/getById', '2023-03-26 20:50:22');
INSERT INTO `backer_menu_tab` VALUES (10, 5, '报警模块-报警记录-获取所有报警记录', 'alarm-1-5', '/alarm/alarm/listAll', '2023-03-26 20:50:39');
INSERT INTO `backer_menu_tab` VALUES (11, 5, '报警模块-报警记录-导出记录', 'alarm-1-6', '/alarm/alarm/export', '2023-03-26 20:50:57');
INSERT INTO `backer_menu_tab` VALUES (12, 5, '报警模块-报警记录-获取设备所有线路运行状态', 'alarm-1-7', '/alarm/alarm/listDeviceLine', '2023-03-26 20:51:16');
INSERT INTO `backer_menu_tab` VALUES (13, 1, '报警模块-短信通知记录', 'alarm-2', '/alarm/message', '2023-03-26 20:51:47');
INSERT INTO `backer_menu_tab` VALUES (14, 13, '报警模块-短信通知记录-获取所有短信通知记录', 'alarm-2-1', '/alarm/message/list', '2023-03-26 20:52:01');
INSERT INTO `backer_menu_tab` VALUES (15, 1, '报警模块-短信通知人员', 'alarm-3', '/alarm/messagePerson', '2023-03-26 20:52:33');
INSERT INTO `backer_menu_tab` VALUES (16, 15, '报警模块-短信通知人员-新增短信通知人员', 'alarm-3-1', '/alarm/messagePerson/create', '2023-03-26 20:52:49');
INSERT INTO `backer_menu_tab` VALUES (17, 15, '报警模块-短信通知人员-删除短信通知人员', 'alarm-3-2', '/alarm/messagePerson/delete', '2023-03-26 20:53:06');
INSERT INTO `backer_menu_tab` VALUES (18, 15, '报警模块-短信通知人员-查询所有短信通知人员', 'alarm-3-3', '/alarm/messagePerson/list', '2023-03-26 20:53:26');
INSERT INTO `backer_menu_tab` VALUES (19, 2, '管理员模块-管理员管理', 'backer-1', '/backer/backer', '2023-03-26 20:53:58');
INSERT INTO `backer_menu_tab` VALUES (20, 19, '管理员模块-管理员管理-管理员列表', 'backer-1-1', '/backer/backer/list', '2023-03-26 20:54:17');
INSERT INTO `backer_menu_tab` VALUES (21, 19, '管理员模块-管理员管理-创建管理员', 'backer-1-2', '/backer/backer/create', '2023-03-26 20:54:41');
INSERT INTO `backer_menu_tab` VALUES (22, 19, '管理员模块-管理员管理-修改管理员', 'backer-1-3', '/backer/backer/modify', '2023-03-26 20:54:54');
INSERT INTO `backer_menu_tab` VALUES (23, 19, '管理员模块-管理员管理-管理员详情', 'backer-1-4', '/backer/backer/info', '2023-03-26 20:55:11');
INSERT INTO `backer_menu_tab` VALUES (24, 19, '管理员模块-管理员管理-修改管理员状态', 'backer-1-5', '/backer/backer/modifyStatus', '2023-03-26 20:55:27');
INSERT INTO `backer_menu_tab` VALUES (25, 19, '管理员模块-管理员管理-修改管理员密码', 'backer-1-6', '/backer/backer/modifyPwd', '2023-03-26 20:55:40');
INSERT INTO `backer_menu_tab` VALUES (26, 19, '管理员模块-管理员管理-重置管理员密码', 'backer-1-7', '/backer/backer/resetPwd', '2023-03-26 20:55:56');
INSERT INTO `backer_menu_tab` VALUES (27, 2, '管理员模块-权限菜单管理', 'backer-2', '/backer/menu', '2023-03-26 20:56:21');
INSERT INTO `backer_menu_tab` VALUES (28, 27, '管理员模块-权限菜单管理-查询角色的权限', 'backer-2-1', '/backer/menu/getRoleMenuInfo', '2023-03-26 20:56:38');
INSERT INTO `backer_menu_tab` VALUES (29, 27, '管理员模块-权限菜单管理-查询所有权限', 'backer-2-2', '/backer/menu/listAll', '2023-03-26 20:56:55');
INSERT INTO `backer_menu_tab` VALUES (30, 2, '管理员模块-角色管理', 'backer-3', '/backer/role', '2023-03-26 20:57:22');
INSERT INTO `backer_menu_tab` VALUES (31, 30, '管理员模块-角色管理-创建角色', 'backer-3-1', '/backer/role/create', '2023-03-26 20:57:40');
INSERT INTO `backer_menu_tab` VALUES (32, 30, '管理员模块-角色管理-修改角色', 'backer-3-2', '/backer/role/modify', '2023-03-26 20:57:58');
INSERT INTO `backer_menu_tab` VALUES (33, 30, '管理员模块-角色管理-修改角色状态', 'backer-3-3', '/backer/role/modifyStatus', '2023-03-26 20:58:14');
INSERT INTO `backer_menu_tab` VALUES (34, 30, '管理员模块-角色管理-删除角色', 'backer-3-4', '/backer/role/delete', '2023-03-26 20:58:36');
INSERT INTO `backer_menu_tab` VALUES (35, 30, '管理员模块-角色管理-角色列表', 'backer-3-5', '/backer/role/listAll', '2023-03-26 20:58:50');
INSERT INTO `backer_menu_tab` VALUES (36, 3, '设备模块-设备管理', 'device-1', '/device/device', '2023-03-26 20:59:25');
INSERT INTO `backer_menu_tab` VALUES (37, 36, '设备模块-设备管理-设备列表', 'device-1-1', '/device/device/list', '2023-03-26 20:59:44');
INSERT INTO `backer_menu_tab` VALUES (38, 36, '设备模块-设备管理-设备详情', 'device-1-2', '/device/device/info', '2023-03-26 20:59:57');
INSERT INTO `backer_menu_tab` VALUES (39, 36, '设备模块-设备管理-新增设备', 'device-1-3', '/device/device/add', '2023-03-26 21:00:11');
INSERT INTO `backer_menu_tab` VALUES (40, 36, '设备模块-设备管理-删除设备', 'device-1-4', '/device/device/delete', '2023-03-26 21:00:27');
INSERT INTO `backer_menu_tab` VALUES (41, 36, '设备模块-设备管理-修改设备名称', 'device-1-5', '/device/device/updateDeviceName', '2023-03-26 21:00:44');
INSERT INTO `backer_menu_tab` VALUES (42, 36, '设备模块-设备管理-修改管理模式为监控', 'device-1-6', '/device/device/updateManageModeToControl', '2023-03-26 21:00:57');
INSERT INTO `backer_menu_tab` VALUES (43, 36, '设备模块-设备管理-修改管理模式为全监控', 'device-1-7', '/device/device/updateManageModeToAll', '2023-03-26 21:01:12');
INSERT INTO `backer_menu_tab` VALUES (44, 36, '设备模块-设备管理-修改管理模式为单面监控', 'device-1-8', '/device/device/updateManageModeToSingle', '2023-03-26 21:01:23');
INSERT INTO `backer_menu_tab` VALUES (45, 36, '设备模块-设备管理-修改管理模式为自定义', 'device-1-9', '/device/device/updateManageModeToMyself', '2023-03-26 21:01:40');
INSERT INTO `backer_menu_tab` VALUES (46, 3, '设备模块-设备线路', 'device-2', '/device/line', '2023-03-26 21:01:59');
INSERT INTO `backer_menu_tab` VALUES (47, 46, '设备模块-设备线路-根据设备Id查询全部线路', 'device-2-1', '/device/line/list', '2023-03-26 21:02:14');
INSERT INTO `backer_menu_tab` VALUES (48, 46, '设备模块-设备线路-修改线路名称', 'device-2-2', '/device/line/updateLineName', '2023-03-26 21:02:28');
INSERT INTO `backer_menu_tab` VALUES (49, 46, '设备模块-设备线路-线路连通或关断', 'device-2-3', '/device/line/lineOnOff', '2023-03-26 21:02:41');
INSERT INTO `backer_menu_tab` VALUES (50, 46, '设备模块-设备线路-设备全部线路连通或关断', 'device-2-4', '/device/line/deviceOnOff', '2023-03-26 21:03:00');
INSERT INTO `backer_menu_tab` VALUES (51, 4, '记录模块-登录记录', 'log-1', '/log/login', '2023-03-26 21:03:44');
INSERT INTO `backer_menu_tab` VALUES (52, 51, '记录模块-登录记录-查询所有登录记录', 'log-1-1', '/log/login/list', '2023-03-26 21:03:57');
INSERT INTO `backer_menu_tab` VALUES (53, 4, '记录模块-操作记录', 'log-2', '/log/operate', '2023-03-26 21:04:17');
INSERT INTO `backer_menu_tab` VALUES (54, 53, '记录模块-操作记录-查询所有操作记录', 'log-2-1', '/log/operate/list', '2023-03-26 21:04:31');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

2.2 Mysql一主多从复制

2.2.1 创建 Slaver-02实例并启动

1.创建实例

docker run -p 3318:3306 --name mysql-slaver-02 \
-v /mydata/mysql/slaver02/log:/var/log/mysql \
-v /mydata/mysql/slaver02/data:/var/lib/mysql \
-v /mydata/mysql/slaver02/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
#设置启动docker时,mysql自启动
docker update mysql-slaver-02 --restart=always

2.修改 slaver-02基本配置

vim /mydata/mysql/slaver02/conf/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

3.添加 slaver-02 主从复制部分配置

vim /mydata/mysql/slaver02/conf/my.cnf
server_id=3                  #注意此处id不能与主节点相同
log-bin=mysql-bin
#是否只读,1 代表只读,0 代表读写
read-only=1
#binlog-do-db配置了哪些数据库需要主从复制
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
binlog-do-db=Test
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

4.重启slaver-02

docker restart mysql-slaver-02

5.为 slaver-02授权用户来他的同步数据

docker exec -it mysql-slaver-02 /bin/bash

6.进入mysql内部

mysql –uroot -p
Enter password:root

7.授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

8.查看master状态
在这里插入图片描述
9. 设置主库连接

change master to master_host='192.168.200.128',master_user='backup',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=0,master_port=3307;
#master_host:主节点虚拟机ip
#master_user:用于连接主机的集群账号
#master_password:用于连接主机的集群密码
#master_log_file必须与2.2.1.8 的File字段一致,Position不用一致后面会自动同步

10.启用主从同步

start slave;

11.查看从库状态

#slaver02的端口号为docker run -p 3318:3306 --name mysql-slaver-01 \ 创建实例中的3317
show slave status

12.主从同步测试(1.主节点新建数据库gulimall_ums,两个从机刷新后也有相同数据库,只要此处同步其实就代表成功了)
在这里插入图片描述
13.2.在主节点gulimall_ums库下执行2.1.5.2的文件
在这里插入图片描述

2.3 Mysql双主双从复制 (独立模块需要重新下载Docker按照2.1步骤一步一步走)

在这里插入图片描述
lz 将虚拟机恢复到快照:Linux未安装Docker时的状态以便后面测试

2.3.1 下载 mysql 镜像
docker pull mysql:5.7
2.3.2 创建 Master-01实例

1.创建 Master-01 实例并启动

docker run -p 3307:3306 --name mysql-master-01 \
-v /mydata/mysql/master-01/log:/var/log/mysql \
-v /mydata/mysql/master-01/data:/var/lib/mysql \
-v /mydata/mysql/master-01/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

2.修改 Master-01 基本配置

vim /mydata/mysql/master-01/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

注意: skip-name-resolve 一定要加, 不然连接 mysql 会超级慢

3.添加 Master-01 主从复制部分配置
#auto_increment_increment,控制主键自增的自增步长,用于防止Master与Master之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少;
#auto_increment_offset=1设置自增起始值,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
#注意auto_increment_offset的设置,不同的master设置不应该一样,否则就容易引起主键冲突,比如master1的offset=1,则master2的offset=2,master3的offset=3
#在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(3307)上进行了更新数据,在master2(3308)和slave1(3309)上会更新,但是在slave2(3310)上不会更新

#为my.cnf写入一下配置
server_id=1                 #指定集群id
log-bin=mysql-bin         #打开二进制日志功能
read-only=0               #关闭只读,可读可写
binlog-do-db=gulimall_ums    #指定mysql的binlog日志记录哪个db
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
binlog-do-db=test_master_01
binlog-do-db=test_master_02
replicate-ignore-db=mysql  #用来设置不需要同步的库,此处指定的mysql系统库
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
auto_increment_increment=2
auto_increment_offset=1
log-slave-updates
sync_binlog=1

4.重启Master-01

docker restart mysql-master-01

5.为 master 授权用户来他的同步数据
(1)进入docker容器

docker exec -it mysql-master-01 /bin/bash

(2) 进入mysql内部

mysql –uroot -p
Enter password:root

(3) 授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

(4) 添加用来同步的用户

GRANT REPLICATION SLAVE ON *.* to 'backup1'@'%' identified by '123456';
#backup1为账号名,
#123456为账号密码
2.3.3 创建 Master-02实例

1.创建 Master-02 实例并启动

docker run -p 3308:3306 --name mysql-master-02 \
-v /mydata/mysql/master-02/log:/var/log/mysql \
-v /mydata/mysql/master-02/data:/var/lib/mysql \
-v /mydata/mysql/master-02/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

2.修改 Master-01 基本配置

vim /mydata/mysql/master-02/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

注意: skip-name-resolve 一定要加, 不然连接 mysql 会超级慢

3.添加 Master-01 主从复制部分配置
#auto_increment_increment,控制主键自增的自增步长,用于防止Master与Master之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少;
#auto_increment_offset=1设置自增起始值,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
#注意auto_increment_offset的设置,不同的master设置不应该一样,否则就容易引起主键冲突,比如master1的offset=1,则master2的offset=2,master3的offset=3
#在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(3307)上进行了更新数据,在master2(3308)和slave1(3309)上会更新,但是在slave2(3310)上不会更新

#为my.cnf写入一下配置
server_id=2                 #指定集群id
log-bin=mysql-bin         #打开二进制日志功能
read-only=0               #关闭只读,可读可写
binlog-do-db=gulimall_ums    #指定mysql的binlog日志记录哪个db
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
binlog-do-db=test_master_01
binlog-do-db=test_master_02
replicate-ignore-db=mysql  #用来设置不需要同步的库,此处指定的mysql系统库
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
sync_binlog=1

4.重启Master-02

docker restart mysql-master-02

5.为 master-02 授权用户来他的同步数据
(1)进入docker容器

docker exec -it mysql-master-02 /bin/bash

(2) 进入mysql内部

mysql –uroot -p
Enter password:root

(3) 授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

(4) 添加用来同步的用户

GRANT REPLICATION SLAVE ON *.* to 'backup2'@'%' identified by '123456';
#backup2为账号名,
#123456为账号密码
2.3.4 创建 Slaver-01实例并启动

1.创建实例

docker run -p 3309:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver01/log:/var/log/mysql \
-v /mydata/mysql/slaver01/data:/var/lib/mysql \
-v /mydata/mysql/slaver01/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

2.修改 slaver-01基本配置

vim /mydata/mysql/slaver01/conf/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

3.添加 slaver-01 主从复制部分配置

vim /mydata/mysql/slaver01/conf/my.cnf
server_id=3                  #注意此处id不能与主节点相同
log-bin=mysql-bin
#是否只读,1 代表只读,0 代表读写
read-only=1
#binlog-do-db配置了哪些数据库需要主从复制
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
binlog-do-db=test_master_01
binlog-do-db=test_master_02
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

4.重启slaver-01

docker restart mysql-slaver-01

5.为 slaver-01授权用户来他的同步数据

docker exec -it mysql-slaver-01 /bin/bash

6.进入mysql内部

mysql –uroot -p
Enter password:root

7.授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

8.查看Master-01状态
在这里插入图片描述
9. 设置Master-01主库连接

change master to master_host='192.168.200.128',master_user='backup1',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3307;
#master_host:主节点虚拟机ip
#master_user:用于连接主机的集群账号
#master_password:用于连接主机的集群密码
#master_log_file必须与2.3.4.8 的File字段一致,Position不用一致后面会自动同步

10.启用主从同步

start slave;

11.查看从库状态

#slaver01的端口号为docker run -p 3309:3306 --name mysql-slaver-01 \ 创建实例中的3309
show slave status

在这里插入图片描述

2.3.5 创建 Slaver-02实例并启动

1.创建实例

docker run -p 3310:3306 --name mysql-slaver-02 \
-v /mydata/mysql/slaver02/log:/var/log/mysql \
-v /mydata/mysql/slaver02/data:/var/lib/mysql \
-v /mydata/mysql/slaver02/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

2.修改 slaver-02基本配置

vim /mydata/mysql/slaver02/conf/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

3.添加 slaver-02 主从复制部分配置

vim /mydata/mysql/slaver02/conf/my.cnf
server_id=4                  #注意此处id不能与主节点相同
log-bin=mysql-bin
#是否只读,1 代表只读,0 代表读写
read-only=1
#binlog-do-db配置了哪些数据库需要主从复制
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_sms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
binlog-do-db=test_master_01
binlog-do-db=test_master_02
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

4.重启slaver-02

docker restart mysql-slaver-02

5.为 slaver-02授权用户来他的同步数据

docker exec -it mysql-slaver-02 /bin/bash

6.进入mysql内部

mysql –uroot -p
Enter password:root

7.授权 root 可以远程访问

#授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
#刷新权限
flush privileges;

8.查看Master-02状态
在这里插入图片描述
9. 设置Master-02主库连接

change master to master_host='192.168.200.128',master_user='backup2',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3308;
#master_host:主节点虚拟机ip
#master_user:用于连接主机的集群账号
#master_password:用于连接主机的集群密码
#master_log_file必须与2.3.4.8 的File字段一致,Position不用一致后面会自动同步

10.启用主从同步

start slave;

11.查看从库状态

#slaver02的端口号为docker run -p 3310:3306 --name mysql-slaver-02 \ 创建实例中的3310
show slave status
2.3.6 Docker 服务器、Mysql容器设置自动启动
查看已启动的服务
systemctl list-units --type=service
查看是否设置开机启动
systemctl list-unit-files | grep enable
设置开机启动
systemctl enable docker.service
关闭开机启动
systemctl disable docker.service
#查看docker是否设置开机启动
systemctl list-unit-files | grep enable | grep docker
#设置启动docker时,mysql自启动
docker update mysql-slaver-01 --restart=always
docker update mysql-master-01 --restart=always
docker update mysql-slaver-02 --restart=always
docker update mysql-master-02 --restart=always
2.3.7 Master-01 Master-02两个主服务器互为主从

1.Master-01为主,Master-02为从
(1)为 master-02授权用户来他的同步数据

docker exec -it mysql-master-02 /bin/bash

(2)进入mysql内部

mysql –uroot -p
Enter password:root

(3)查看Master-01状态

show master status

在这里插入图片描述
(4)设置Master-01主库连接

change master to master_host='192.168.200.128',master_user='backup1',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3307;
#master_host:主节点虚拟机ip
#master_user:用于连接主机的集群账号
#master_password:用于连接主机的集群密码
#master_log_file必须与2.3.4.8 的File字段一致,Position不用一致后面会自动同步

(5)启用主从同步

start slave;

2.Master-02为主,Master-01为从
(1)为 master-02授权用户来他的同步数据

docker exec -it mysql-master-01 /bin/bash

(2)进入mysql内部

mysql –uroot -p
Enter password:root

(3)查看Master-02状态

show master status

在这里插入图片描述
(4)设置Master-02主库连接

change master to master_host='192.168.200.128',master_user='backup2',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3308;
#master_host:主节点虚拟机ip
#master_user:用于连接主机的集群账号
#master_password:用于连接主机的集群密码
#master_log_file必须与2.3.4.8 的File字段一致,Position不用一致后面会自动同步

(5).启用主从同步

start slave;

2.4 Mysql双主双从复制数据测试

2.4.1 为Master-01添加数据库test_master_01,刷新Slaver01和Slaver01和Master-02看是否有数据库产生,有则成功

在这里插入图片描述

2.4.2 为Master-02添加数据库test_master_02,刷新Slaver01和Slaver02和Master-01看是否有数据库产生,有则成功

在这里插入图片描述

2.4.3 为Master-01的数据库test_master_01添加下列数据,刷新Slaver01和Slaver01和Master-02看是否有数据产生,有则成功
DROP TABLE IF EXISTS `backer_menu_tab`;
CREATE TABLE `backer_menu_tab`  (
  `menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限Id',
  `parent_id` int(11) NOT NULL COMMENT '父级权限Id,第一级权限值为0',
  `menu_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限名称',
  `menu_sign` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限标识符',
  `menu_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限路径',
  `add_time` datetime(0) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`menu_id`) USING BTREE,
  UNIQUE INDEX `menu_sign`(`menu_sign`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of backer_menu_tab
-- ----------------------------
INSERT INTO `backer_menu_tab` VALUES (1, 0, '报警模块', 'alarm', '/alarm', '2023-03-26 20:46:17');
INSERT INTO `backer_menu_tab` VALUES (2, 0, '管理员模块', 'backer', '/backer', '2023-03-26 20:47:19');
INSERT INTO `backer_menu_tab` VALUES (3, 0, '设备模块', 'device', '/device', '2023-03-26 20:47:48');
SET FOREIGN_KEY_CHECKS = 1;

Master01
在这里插入图片描述

Master02
在这里插入图片描述

Slaver01
在这里插入图片描述

Slaver02
在这里插入图片描述

2.4.4 为Master-02的数据库test_master_02添加下列数据,刷新Slaver01和Slaver01和Master-02看是否有数据产生,有则成功
DROP TABLE IF EXISTS `backer_menu_tab`;
CREATE TABLE `backer_menu_tab`  (
  `menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限Id',
  `parent_id` int(11) NOT NULL COMMENT '父级权限Id,第一级权限值为0',
  `menu_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限名称',
  `menu_sign` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限标识符',
  `menu_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限路径',
  `add_time` datetime(0) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`menu_id`) USING BTREE,
  UNIQUE INDEX `menu_sign`(`menu_sign`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of backer_menu_tab
-- ----------------------------
INSERT INTO `backer_menu_tab` VALUES (1, 0, '报警模块', 'alarm', '/alarm', '2023-03-26 20:46:17');
INSERT INTO `backer_menu_tab` VALUES (2, 0, '管理员模块', 'backer', '/backer', '2023-03-26 20:47:19');
INSERT INTO `backer_menu_tab` VALUES (3, 0, '设备模块', 'device', '/device', '2023-03-26 20:47:48');
SET FOREIGN_KEY_CHECKS = 1;

Master02
在这里插入图片描述

Master01
在这里插入图片描述

Slaver01
在这里插入图片描述

Slaver02
在这里插入图片描述

由上图知双主双从测试完成

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值