公司服务器自用搭建的主从复制,因为是内网,为了方便查看和修改数据服务器使用了Windows的系统。
一、安装Mysql8.0
1、下载MYSQ8.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;
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;
如果同步失败在此处会提示失败的信息。
5.2 查看从状态
show slave status
这两个字段都为Yes表示同步成功。
6、主从不同步解决办法
6.1、查看子节点的同步状态为NO解决办法
1、去主节点查看同步的文件(File)和同步文件中的偏移量(Position)
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