公司服务器自用搭建的主从复制,因为是内网,为了方便查看和修改数据服务器使用了Windows的系统。

一、安装Mysql8.0

1、下载MYSQ8.0

点击进入下载,点击左下角不登录直接下载。

windowsServer安装Docker Desktop windowsserver安装mysql8.0_服务器

2、解压安装

参照此篇文章,亲测可用:windows安装mysql详细步骤

3、配置环境变量

环境变量配置PATH添加mysql的bin目录路径。

二、搭建主从复制

1、创建my.ini

免安装默认没有my.ini需要自己手动创建一个,这里在根目录创建my.ini,也可用自己任意放置my.ini文件所在位置。

】从节点只能同步搭建主从后新增和修改的数据,在搭建之前主节点的旧数据不会进行同步。

1.1 主my.ini配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port= 3306
# 设置mysql的安装目录
basedir=E:\mysql-8.0.27-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\mysql-8.0.27-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#主库和从库需要不一致
server_id=1
log-bin=mysql-bin
#同步的数据库,多个数据库重新复制一份binlog-do-db=xxx
binlog-do-db=test
#不需要同步的数据库,多个数据库重新复制一份binlog-ignore-db=xxx
binlog-ignore-db=mysql

1.2 从my.ini配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=E:\mysql-8.0.27-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\mysql-8.0.27-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#主库和从库需要不一致
server-id=2
log-bin=mysql-bin
#同步的数据库,多个数据库重新复制一份binlog-do-db=xxx
binlog-do-db=test
#不需要同步的数据库,多个数据库重新复制一份binlog-ignore-db=xxx
binlog-ignore-db=mysql

1.3 指定my.ini位置

进入mysql的bin文件夹打开cmd,后面路径改成自己的my.ini位置。

【注】 记得重启Mysql服务配置才会生效

mysqld  --defaults-file="E:\mysql-8.0.27-winx64\my.ini"

2、配置主数据库

2.1 创建同步用户

CREATE USER 'slave'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456'
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' 
FLUSH PRIVILEGES;

2.2 查询主数据库状态

从数据库要用到的file和positon字段值

show master status;

windowsServer安装Docker Desktop windowsserver安装mysql8.0_主数据_02

3、配置从数据库

3.1 先停止从同步
stop slave;
3.2 配置同步
CHANGE MASTER TO
   MASTER_HOST='主数据库IP',
   MASTER_USER='slave', #上面2.1配置的账号
   MASTER_PASSWORD='123456', #上面2.1配置的密码
   MASTER_LOG_FILE='mysql-bin.000002', #2.2主数据库状态的file
   MASTER_LOG_POS=868; #2.2主数据库状态的position
3.3 运行从
start slave;

4、验证主从同步

4.1 创建test数据库

主和从都创建一个test数据库,如果只创建主test数据库不会进行同步

create schema test collate utf8_general_ci;
4.2 主创建student表

在主数据库随便新增几条数据,从数据库会自动同步表和数据过去。

create table student
(
    id   int null,
    name varchar(50) null,
    sex  int null
);

5、同步失败查看

5.1 第一种,在从查看同步信息
select * from performance_schema.replication_applier_status_by_worker;

如果同步失败在此处会提示失败的信息。

windowsServer安装Docker Desktop windowsserver安装mysql8.0_windows_03

5.2 查看从状态
show slave status

这两个字段都为Yes表示同步成功。

windowsServer安装Docker Desktop windowsserver安装mysql8.0_服务器_04

6、主从不同步解决办法

6.1、查看子节点的同步状态为NO解决办法

windowsServer安装Docker Desktop windowsserver安装mysql8.0_服务器_05

1、去主节点查看同步的文件(File)和同步文件中的偏移量(Position)

windowsServer安装Docker Desktop windowsserver安装mysql8.0_服务器_06

2、去从节点覆盖旧的同步文件(master_log_file)和偏移量(156)

#停止同步
stop slave;
#覆盖同步文件和偏移量,这里是指同步主节点的文件和在同步文件里的位置
change master to master_host='192.168.21.190',master_user='slave',master_password='123456',master_log_file='mysql-bin.000023',master_log_pos=156;
#启动同步
start slave;
#查看同步状态
show slave status ;

三、Mysql8.0不修改配置的Windwos备份脚本

mysql8.0不能直接使用密码来进行备份,会提示密码不安全。
网上大部分都是修改配置,本人认为麻烦,然后发现这种方法也是可以备份的。

1、在mysql创建备份用户

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup';
grant select,show view,lock tables,trigger on *.* TO 'backup'@'localhost' WITH GRANT OPTION;

2、备份脚本

set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
if "%time:~0,1%"==" " set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"

mysqldump -ubackup -hlocalhost -pbackup --single-transaction szs_eduequip>e:/backup/dumpFile/%Ymd%_szs_eduequip.sql

mysqldump -ubackup -hlocalhost -pbackup --single-transaction ft_eduequip>e:/backup/dumpFile/%Ymd%_ft_eduequip.sql

java FileBackup