这里只是记录下,防止自己遗忘了其中步骤:
一:关于mysql8的安装
1.官网下载mysql https://www.mysql.com/downloads/
2.解压文件,并添加my.ini放在当前目录下
文件内容如下:
[mysqld]
#绑定IPv4,如果是0.0.0.0则表示任意IP都可以访问,也可以指定可以访问的IP
bind-address = 0.0.0.0
# 设置mysql的安装目录,即你解压缩安装包的位置
basedir =D:\zhouxl\mysql-8.0.26-winx64
# 设置mysql数据库的数据的存放目录
datadir =D:\zhouxl\mysql-8.0.26-winx64\data
# 设置端口号
port = 3306
# 回收空闲连接的时间
wait_timeout = 86400
# 允许最大连接数
max_connections = 200
# 数据库 写入的 数据包 最大值
max_allowed_packet = 512M
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 设置字符集为utf8
loose-default-character-set = utf8
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
#开启查询缓存
explicit_defaults_for_timestamp = true
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# mysql 8.0 以上默认的密码加密方式
default_authentication_plugin = mysql_native_password
#关闭binlog
#skip-log-bin
#开启binlog日志
log-bin=mysql-bin
binlog-format=Row
expire_logs_days=7
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
3.在bin目录下执行 mysqld --initialize --console 初始化
可能出现问题:1.权限不足(请以管理员运行cmd)
4.3步骤里因为配置文件里的密码模式会生成初始密码在打印的日志中,我这里是epkg8A)3?usr,注意记录下来,后面登录用到
5.mysqld install部署 后net start mysql ,如果都提示启动成功,才表示成功,配置错误或者其他错误都可能显示由部分不成功
可能原因:1.配置不正确 2.修改配置后没有重启(在管理里看服务类右键重启)
6.bin目录下执行mysql -u root -p 密码是第4步记录的密码,注意这里会有提示需要修改初始密码,否则无法进行后续操作。这里面可以2种方式,一种的添加--skip-grant-tables(这里不用初始密码也可以进入),2种是执行sql修改(我使用的是这个)
6.开启bin-log
默认是不开启的,不过我们配置文件已经由相关配置
查看是否 开启 show variables like '%log_bin%' on为开启 off关闭,这里ini文件配置好了
二: bin-log使用
根据上面配置binlog会生成下面的bin-log.00001这种二进制文件,我们需要准备一个不断插入数据的test或者sql。
1.查看当前状态 show master status
目前是00003这个log正生成log
2.flush logs 重新生成,会记录到最新的日志状态
3.初略的看一眼这个日志 show binlog events in "mysql-bin.000004"
4.找到其中需要恢复点,这里我设置为开头点为125,结束点为14363,将此部分bin-log转成test.sql,指令为: mysqlbinlog --no-defaults --start-position=125 --stop-position=14363 D:\zhouxl\mysql-8.0.26-winx64\data\mysql-bin.000004 > test.sql
--no-defaults是因为我设置的文件编码是utf-8,可能在windows上提示编码错误
这里也可以根据时间来恢复 --start--datetime="2021-08-20 13:33:00" --stop-datetime="2021-08-20 13:35:00"
5.生成的文件先看下是否正确,然后做导入处理
文件开始
其实这里面的BINLOG由于编码格式的问题还是乱码,这里可以指定解码来查看(-d 代表我看到的table)
mysqlbinlog --no-defaults --base64-output=decode-rows -vvvvvv D:\zhouxl\mysql-8.0.26-winx64\data\mysql-bin.000004 -d bin_log_test
这里并有显示的sql,比如这个query
6测试
将表所有数据删除,执行source D:\zhouxl\mysql-8.0.26-winx64\bin\test.sql,可以看到Query OK提示
扩充:我们将刚00003的文件也做了下sql转换
mysqlbinlog --no-defaults D:\zhouxl\mysql-8.0.26-winx64\data\mysql-bin.000003 > test1.sql
导入mysql
可以看到数据前面又恢复了部分
在实际操作中,应该对比较重要的数据做下备份,这样恢复点比较好找,也不容易丢失,大批量迁移或者恢复还是得借助第三方工具