我们这里先aliyun205这台服务器上通过docker创建一个mysql5.7的数据库,然后在该数据上存放一些测试数据,模拟备份打包为tar.gz文件。最后在VM_190_147_centos这台服务器上把打包的数据库通过docker镜像恢复出来。
1、通过docker构建mysql5.7数据库
1、拉取镜像
[root@aliyun205 ~]# docker pull mysql:5.7.24
2、常见目录
[root@aliyun205 ~]# mkdir -p /opt/mysql3306/{conf,logs,data}
3、启动容器
[root@aliyun205 ~]# docker run -it -d -p 3306:3306 --name=mysql --mount type=bind,src=/opt/mysql3306/conf,dst=/etc/mysql --mount type=bind,src=/opt/mysql3306/logs,dst=/var/log/mysql --mount type=bind,src=/opt/mysql3306/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.24
e3560ae32aec1ad87b336f8aef0a2bab3c7b75fa182f0d1882846921de85de66
【说明】我们使用--mount挂载点的方式指定目录,对这些挂载点说明
(1)--mount type=bind,src=/opt/mysql3306/conf,dst=/etc/mysql 将主机当前目录下的conf挂载到容器的/etc/mysql;
(2) --mount type=bind,src=/opt/mysql3306/logs,dst=/var/log/mysql将主机当前目录下的logs目录挂载到容器的/var/log/mysql;
(3)--mount type=bind,src=/opt/mysql3306/data,dst=/var/lib/mysql 将主机当前目录下的data目录挂载到容器的/var/lib/mysql;
(4)-e MYSQL_ROOT_PASSWORD=123456 指定数据库的初始化密码。
【参数说明:】
(1)-e MYSQL_USER="woniu" :添加woniu用户;
(2)-e MYSQL_PASSWORD="123456":设置添加的用户密码;
(3)-e MYSQL_ROOT_PASSWORD="123456":设置root用户密码;
(4)--character-set-server=utf8:设置字符集为utf8;
(5)--collation-server=utf8_general_cli:设置字符比较规则为utf8_general_cli。
(6)--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限;
(7)-v /docker/mysql/conf/my.cnf:/etc/my.cnf:映射配置文件
2、备份数据
1、模拟数据
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '张三', '10');
INSERT INTO `user` VALUES ('2', '李四', '20');
INSERT INTO `user` VALUES ('3', '王五', '30');
2、这里模糊docker挂掉了
[root@aliyun205 ~]# docker stop mysql
mysql
3、进入/opt/mysql3306目录,使用tar -zcvf命令打包,压缩包就是我们备份的数据
[root@aliyun205 opt]# cd /opt/mysql3306/
[root@aliyun205 mysql3306]# tar -zcvf backup.tar.gz ./
3、恢复数据
VM_190_147_centos这台服务器上已经有了相同版本的docker镜像,且我们把对应目录为/data/mysql3306/,并把上一步骤转给你备份文件方在该目录。
[root@VM_190_147_centos ~]# cd /data/mysql3306/
[root@VM_190_147_centos mysql3306]# ll
total 7072
-rw-r--r-- 1 root root 7239684 Dec 7 10:17 backup.tar.gz
在/data/mysql3306目录下解压缩备份文件
[root@VM_190_147_centos mysql3306]# tar -zxvf backup.tar.gz
[root@VM_190_147_centos mysql3306]# ll
total 7084
-rw-r--r-- 1 root root 7239684 Dec 7 10:17 backup.tar.gz
drwxr-xr-x 2 root root 4096 Dec 7 10:06 conf
drwxr-xr-x 6 polkitd ssh_keys 4096 Dec 7 10:14 data
drwxr-xr-x 2 root root 4096 Dec 7 10:06 logs
启动容器
[root@VM_190_147_centos ~]# docker run -it -d --name=mysql -p 3306:3306 --mount type=bind,src=/data/mysql3306/conf,dst=/etc/mysql --mount type=bind,src=/data/mysql3306/logs,dst=/var/log/mysql --mount type=bind,src=/data/mysql3306/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.24
fe231cfb5ef36b2e5d5dd019c8d8b734d6d236d47877216b6a38e6de37db0393
检查数据是否存在
root@VM_190_147_centos ~]# docker ps
[root@VM_190_147_centos ~]# docker exec -it mysql bash
root@fe231cfb5ef3:/# mysql -uroot -p123456
mysql> use wzy;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | ?? | 10 |
| 2 | ?? | 20 |
| 3 | ?? | 30 |
+----+------+------+
3 rows in set (0.00 sec)