本文出自明月工作室:https://www.freebytes.net/it/java/dokcer-mysql-binlog.html
简介
利用Docker的mysql容器,可以方便的部署一个简单的mysql服务器
实现步骤
1、下载镜像
docker pull mysql
2、运行容器
docker run -d -p 3306:3306 --name your_db_name -v /your_directory/mysql/data:/var/lib/mysql -v /your_directory/mysql/conf:/etc/mysql/conf.d -v /your_directory/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=your_password mysql
3、参数解析
-v /your_directory/mysql/data:/var/lib/mysql 挂载数据库数据 -v /your_directory/mysql/conf:/etc/mysql/conf.d 挂载配置文件 -v /your_directory /mysql/log:/var/log/mysql 挂载数据库日志 -e MYSQL_ROOT_PASSWORD=your_password 数据库root用户的密码 mysql 镜像名 --name your_db_name 定义的容器名 -d 后台运行容器
创建可供外部访问的用户
CREATE USER test@'%' IDENTIFIED BY 'test'; GRANT ALL privileges ON test.* TO test@'%'; FLUSH PRIVILEGES;
开启binlog日志
在/your_directory/mysql/conf目录下,新建文件my.cnf,因为我们做了挂载映射,因此 /your_directory/mysql/conf/my.cnf相当于是容器内的/etc/mysql/conf.d/my.cnf。
而MySQL的容器实例设置会组合 /etc/mysql/my.cnf 和 /etc/mysql/conf.d/my.cnf 两个配置文件。
在my.cnf中输入以下内容:
[mysqld] log-bin=/var/lib/mysql/mysql-bin server-id=1 binlog_format=MIXED expire_logs_days=30 ##binlog日志有三种格式:Statement、Row以及Mixed。 mysql默认采用statement, ##这里使用mixed ##expire_logs_days是日志过期时间,这里配置为30天,默认是0,0是永久的意思
重启容器docker restart mysql,即可开启binlog。可使用相关命令查询binlog:
##查看binlog日志是否开启 show variables like '%log_bin%'; ##查看binlog日志路径 show variables like '%datadir%'; ##刷新日志,会新建一个binlog日志文件 flush logs ##查看日志详情内容 show binlog events in 'mysql-bin.000002'; ##查看日志过期时间 0为永久 show variables like 'expire_logs_days';
通过binlog日志恢复数据
mysql自带mysqlbinlog工具。进入docker容器直接运行指令:
mysqlbinlog --start-datetime='2021-01-20 05:02:02' --stop-datetime='2021-01-20 09:02:02' /var/lib/mysql/mysql-bin.000001 | mysql -u root -p
即可恢复数据。其中参数解释如下:
--start-datetime='2021-01-20 05:02:02' 开始时间 --stop-datetime='2021-01-20 09:02:02' 结束时间 /var/lib/mysql/mysql-bin.000001 binlog日志文件,如有多个文件,可按顺序 写下,以空格隔开 | mysql -u root -p 表示以root账号执行mysql的数据恢复操作
更多与binlog操作相关的信息可参考这篇文章:https://www.iteye.com/blog/flyer0126-2210993
另外分享一篇关于全量备份和增量备份的方案的博文:
https://blog.51cto.com/wangweiak47/1589304
这里如果需要使用binlog文件去迁移或者同步mysql数据时,需要将binlog_format设置为ROW格式的,否则就会导致任务失败甚至数据丢失
踩踩踩
博主方便留个联系方式吗,我想请教一下关于docker的知识点