时间:2020.09.04
环境:CentOS
目的:实现MySQL5.7和8.0版本的本地备份、Docker备份和远程备份
说明:
作者:Zhong QQ交流群:121160124 欢迎加入!
目录
为了说明MySQL5.x和8.x版本之间的不同 准备了两台云服务器 环境为CentOS7 在真实环境已经验证效果 为了去敏 这儿假设两台主机为192.168.1.1和192.168.1.2
信息如下所示
192.168.1.1 | ||
MySQL | ||
版本:5.7.30 | ||
用户名:mysql57 密码:7777777 | ||
192.168.1.2 | ||
MySQL | ||
版本:8.0.20 | ||
用户名:mysql80 密码:88888888 |
两个MySQL都有一个名为project的数据库 这个数据库中有若干张表
本地备份MySQL数据库project
192.168.1.1主机运行下面的命令 会提示输入密码 输入7777777
mysqldump -umysql57 -p project > project.sql
也可以直接输入密码运行
mysqldump -umysql57 -p7777777 project > project.sql
还可以指定IP、端口 并压缩存储
mysqldump -umysql57 -p 7777777 -h 127.0.0.1 -P 3306 project | gzip > project.sql.gz
192.168.1.2同理
mysqldump -umysql80 -p project > project.sql
# 或者
mysqldump -umysql80 -p 88888888 project > project.sql
# 或者
mysqldump -umysql80 -p 88888888 -h 127.0.0.1 -P 3306 project | gzip > project.sql.gz
远程备份MySQL数据库project
实现上面的两台主机互相备份
一种方案是基于上面的本地备份 使用rsync或scp或其它工具如Python脚本之类的工具来把本地备份发送到远程主机或远程主机复制本地备份的文件到远程主机 这种方案作者之前的文章有介绍可自行查阅
现在介绍另一种简单的方式
192.168.1.1主机备份192.168.1.2主机MySQL数据库
在192.168.1.1主机上执行命令 即可备份远程的主机MySQL数据库
mysqldump -umysql80 -p88888888 -h 192.168.1.2 -P 3306 project > project.sql
192.168.1.2主机备份192.168.1.1主机MySQL数据库 这儿稍有不同 因为192.168.1.2主机上的MySQL版本是8.0 直接用上面的语法备份会提示如下的信息
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'project' AND TABLE_NAME = 'auth_group';': Unknown table 'column_statistics' in information_schema (1109)
这是因为新版本的mysqldump增加了一个新的参数标志 可以使用--column-statistics=0来解决这个问题
mysqldump --column-statistics=0 -umysql57 -p7777777 -h 192.168.1.1 -P 3306 project > project.sql
这样就做到了两台主机互相备份数据库数据 结合需求可以使用crontab定时任务或者其它脚本实现定时远程MySQL数据库数据备份的目的
Docker MySQL备份数据库project到本地
有时候想要在本地备份docker中的MySQL数据库 但是本地没有安装MySQL 也就没办法使用MySQL的相关命令 可以通过执行docker中MySQL的相关命令来备份docker里面的MySQL数据到本地
例如本地运行一个MySQL的docker 容器名mysql MySQL用户名root 密码88888888 要备份project数据库 可执行如下命令
docker exec -it mysql mysqldump -uroot -p88888888 project > project.sql
如果使用crontab定时备份docker里面的MySQL数据库的话 不要加-it选项 加的话会有问题 因为crontab不需要
还原备份则如下步骤
编辑备份文件project.sql 注释第一行(使用/* ... */注释)
/*mysqldump: [Warning] Using a password on the command line interface can be insecure.*/
-- MySQL dump 10.13 Distrib 5.7.32, for Linux (x86_64)
--
-- Host: localhost Database: project
-- ------------------------------------------------------
-- Server version 5.7.32
执行还原就行了
docker exec -i mysql mysql -uroot -p88888888 project < project.sql
关注微信公众号