docker 的mysql还原阿里云RDS for MySQL 物理备份文件

安装docker的mysql,  由于笔者的阿里云的mysql5.6,percona-xtrabackup必须是2.3.10

首先安装一个docker的mysql, 用下面的命令,必须跟阿里云的mysql版本一致,使用select version(); 可以查看mysql版本号 ,笔者阿里云的mysql是是5.6.16-log,所以装的是mysql:5.6

 

 

docker run -v "E:\tmp\mnt:/data" --name docker-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 13306:3306 -d mysql:5.6

 

其中 -v表示挂载目录 ,把本机的E:\tmp\mnt 挂载到 docker的/data目录,这样才能从主机复制文件到docker ,千万不能省,--name docker-mysql 表示docker的容器名称叫做docker-mysql ,可以随便取。 -d mysql:5.6 表示取得是mysql5.6版本镜像。

可以参考官方文档 https://hub.docker.com/_/mysql/

然后进入mysql的docker内:

docker exec -it docker-mysql bash

 

 

mysql 的linux版本是

root@8c99cbc8dd6f:/# cat /etc/issue

Debian GNU/Linux 9 \n \l

表示 Debian 9(stretch) — 旧的稳定版(oldstable)

参考文档:

https://www.debian.org/releases/

为了下载软件,更新debian的镜像,这个版本是stretch

/etc/apt/sources.list ,添加下面的东西

 

deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib

deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib

deb http://mirrors.aliyun.com/debian-security stretch/updates main

deb-src http://mirrors.aliyun.com/debian-security stretch/updates main

deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib

deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib

deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

参考文档:

https://www.cnblogs.com/horizonli/p/5179224.html

注意mysql装的debian什么都没有,要用主机的上的编辑器修改改之后 ,通过挂载的目录拷进去

 

 

然后 apt-get update 更新应用修改

 

然后下载安装percona-xtrabackup ,这个是阿里云的mysql使用的热备份工具

拷风到刚才挂载的目录上,2.3.10版本下载地址:https://www.percona.com/downloads/Percona-XtraBackup-2.3/Percona-XtraBackup-2.3.10/binary/debian/stretch/x86_64/percona-xtrabackup_2.3.10-1.stretch_amd64.deb

 

输入命令安装,注意有其他文件,只要下载像这样的文件就行了,有不同版本,像percona-xtrabackup-dbg_2.3.10-1.stretch_amd64.deb表示调试版本,不用下载

dpkg -i percona-xtrabackup_2.3.10-1.stretch_amd64.deb

会报错依赖丢失,怎么办输入:

apt-get -f -y install

意思就是假如你的系统上有某个package不满足依赖条件,这个命令就会自动修复,安装那个package依赖的package。

然后再输入dpkg -i percona-xtrabackup_2.3.10-1.stretch_amd64.deb

然后:

apt-get update

apt-get install percona-xtrabackup

安装参考资料

https://www.percona.com/doc/percona-xtrabackup/2.3/installation/apt_repo.html

 

xtrabackup 参考资料:

https://www.percona.com/downloads/Percona-XtraBackup-2.3/LATEST/

可能会遇到问题,百度一下就行了

然后使用xtrabackup来还原数据,把阿里云下载的备份文件拷到挂载的目录上

笔者是hins9364501_data_20190923104325_qp.xb ,把他解压到/home/mysql/data,使用命令如下:

## 创建目录:

mkdir -p /home/mysql/data

## 解包

cat hins9364501_data_20190923104325_qp.xb | xbstream -x -v -C /home/mysql/data

## 解压

innobackupex --decompress --remove-original /home/mysql/data

结果报sh: 1: qpress: not found

cat: write error: Broken pipe

Error: decrypt and decompress thread 0 failed.

解决办法:

http://www.quicklz.com/qpress-11-linux-x64.tar 下载下来,

tar xvf qpress-11-linux-x64.tar

cp qpress /usr/bin

 

再执行innobackupex --decompress --remove-original /home/mysql/data

成功

 

执行如下命令,恢复解压好的备份文件。

innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data

把执行如下命令,修改文件属主,并确定文件所属为MySQL用户

chown -R mysql:mysql /home/mysql/data

最后把 /home/mysql/data 挂载到docker的mysql时差去,

编辑/etc/mysql/mysql.conf.d/mysqld.cnf ,替换mysql 目录

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

#datadir = /var/lib/mysql

datadir = /home/mysql/data

#log-error = /var/log/mysql/error.log

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

我是使用外面编辑好,再拷过去

cp /data/mysqld.cnf /etc/mysql/mysql.conf.d/

 

重启docker 试试看,用navicat连接上看看,用阿里云上的用户登录 果然好了。

 

但是还有一个问题,不能用root登录 ,/etc/mysql/mysql.conf.d/mysqld.cnf加上

skip-grant-tables,这样就能使用root ,没有密码登录了

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

#datadir = /var/lib/mysql

datadir = /home/mysql/data

#log-error = /var/log/mysql/error.log

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

skip-grant-tables

 

用navicat登录之后 ,修改root用户密码,结果发现还是不能用localhost登录 ,怎么办,

update user set password=password('123456') where user='root';

flush privileges;

 

查询select * from user where user='root';

发现没有localhost,把127.0.0.1复制出来,改成localhost插入就行了

INSERT INTO `mysql`.`user`(`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`) VALUES ('localhost', 'root', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, '', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'N');

结果是:

就可以在localhost上使用root登录了

 

最后注意的是默认的mysql的配置文件是:/etc/mysql/mysql.conf.d/mysqld.cnf 如果要修改,修改之后 ,如果重启失败,可以把可以用的mysqld.cnf拷进去,再重启试试,命令如下:其中d17d5768b241的容器名。

docker cp .\mysqld.cnf d17d5768b241:/etc/mysql/mysql.conf.d/

 

阿里云上相关参考资料:

https://help.aliyun.com/knowledge_detail/41817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值