由于最近用了3年的云服务器到期,续费很贵,一气之下用儿子玩剩下的小主机来做家庭服务器,在上面装了飞牛OS。这几天就琢磨着怎么把所有数据都搬到这台家庭服务器上。今天开始搞MySQL数据库。
一,配置Docker的国内镜像源
飞牛OS原生支持Docker,就不用自己装了。为了方便拉取镜像, 需要配置Docker的国内镜像源如下:
在飞牛OS里修改文件 /etc/docker/daemon.json :
{
"data-root":"/vol2/docker",
"insecure-registries":["127.0.0.1:19827"],
"live-restore":true,
"registry-mirrors":["https://ccr.ccs.tencentyun.com"] ## 腾讯镜像源
}
二,拉取MySQL镜像
在飞牛OS里打开Docker应用,搜索mysql镜像,并下载到本地:
用ssh连到飞牛OS, 查看一下下载下来的镜像:
三,挂载数据目录
为了数据安全(保证即使容器出问题了数据还在),在部署 MySQL 时,可以通过挂载宿主机的目录到容器内部的 MySQL 数据目录,从而将数据持久化保存在宿主机上,而不是存储在容器内部。
首先,在宿主机上创建一个目录,用于存储 MySQL 的数据:
mkdir -p /vol2/1000/mysql_data
MySQL 容器内的用户(通常是mysql:mysql) 需要有权限读写宿主机的挂载目录 (这里是/vol2/1000/mysql_data) , 可以在宿主机上进行以下设置:
chmod -R 755 /vol2/1000/mysql_data
chown -R 999:999 /vol2/1000/mysql_data ## 999:999分别是mysql用户的group名和userID
# 可以在容器内用id mysql命令查到
然后,启动 MySQL 容器并挂载数据目录:
docker run -p 3306:3306 --name=mysql844 -e MYSQL_ROOT_PASSWORD=123456 -v /vol2/1000/mysql_data:/var/lib/mysql -d mysql:8.4.4
命令解释:
- -e MYSQL_ROOT_PASSWORD=your_root_password :设置 MySQL 的 root 用户密码。
- -p 3306:3306 :将容器的 3306 端口映射到宿主机的 3306 端口。
- -v /vol2/mysql_data:/var/lib/mysql:将宿主机的/vol2/mysql_data目录挂载到容器的 /var/lib/mysql目录。
- -d mysql:8.4.4 :后台运行 MySQL 8.4.4 容器。
四,验证数据持久化:
- 在飞牛OS桌面打开文件管理,进到mysql_data目录,可以看到里面已经有数据了:
- 测试数据持久化:
在 MySQL 中创建一个数据库或表:CREATE DATABASE test_db; CREATE TABLE testdb.users(id INT); CREATE TABLE testdb.orders(id INT);
停止并删除容器:
docker stop mysql844 docker rm mysql844
在飞牛OS桌面看数据还在:
-
重新启动容器:
docker run -p 3306:3306 --name=mysql844 -e MYSQL_ROOT_PASSWORD=123456 -v /vol2/1000/mysql_data:/var/lib/mysql -d mysql:8.4.4
远程连接到 MySQL,检查 test_db数据库 和 users, orders table是否仍然存在:
test_db数据库和users, orders table仍然存在,说明数据已经成功持久化到宿主机。
由于数据存储在宿主机上,我们可以直接备份 /vol2/1000/mysql_data目录,方便迁移或恢复,避免因容器删除而导致数据丢失。