这篇文章上次修改于 245 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

备份

刚刚后台删垃圾评论一不小心把最近的正常评论清掉了,巧的是我还没数据库备份,这下尴尬了.之前一直嫌麻烦没装 Navicat 现在就是后悔.jpg

待会就整个命令行备份

6/28: 好巧不巧,升级MySQL数据库全没了,要是没备份我怕是要当场去世.

我使用的是经典的MySQL5.6,并且我要备份的数据库也只有一个.找了一个命令执行之后确实有效果,但同时也出现了一行警告Warning: Using a password on the command line interface can be insecure.警告这种东西我也不是第一次见了,不是报错都是小问题.但既然它出现了,那我看着就不爽,于是又找了解决方案,如下:

### 原命令

mysqldump -h127.0.0.1 -uroot -ppassword database_name> /root/backup.sql

### 修改后(带时间不覆盖文件)

mysqldump -h127.0.0.1 database_name> /root/backup_$(date +%Y%m%d).sql

修改后的账号密码信息写到my.cnf文件里去了.路径供参考,我的直接在etc目录下

vim /etc/mysql/my.cnf

[mysqldump]

user=your_backup_user_name

password=your_backup_password

至于导入就是把箭头换一个方向就行了.

Docker

以官方镜像 MySQL8 为例,通过定时任务将容器中的数据库备份到宿主机下。

首先需要配置一下默认用户,可以通过目录映射或者手动进容器改

# 容器内 /etc/mysql/conf.d/customer.cnf
[mysqldump]
user=xxx
password=xxx

宿主机下测试

docker exec -i <容器名> mysqldump typecho> ./backup.sql

修改文件名标识风格(不推荐在任何路径 / 文件名中使用特殊字符和空格)

echo "/backup/$(date +'%Y%m%d %H:%M:%S').sql"

添加到定时任务(注意转义字符)

# 编辑,将这条内容添加到新的一行并保存退出
crontab -e
55 23 * * * docker exec -i db mysqldump typecho > "/root/backup/$(date +\%Y-\%m-\%d).sql"
# 查看
crontab -l

其实也很简单,就是来回换系统导致定时任务经常丢失又没有及时发现(