前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Ubuntu20.04以Docker方式安装Mysql详细教程(支持外部连接,数据映射到物理磁盘,备份数据,导出数据,恢复数据)

在Ubuntu20.04以Docker方式安装Mysql详细教程(支持外部连接,数据映射到物理磁盘,备份数据,导出数据,恢复数据)

作者头像
zhaoolee
发布2023-08-13 11:21:24
3.1K0
发布2023-08-13 11:21:24
举报
文章被收录于专栏:木子昭的博客

最近,从阿里云迁移到天翼云,为了保证WordPress查库速度,数据库也要一并迁移,但数据库是很贵的,为了降低个人WordPress网站的成本,我决定自己建数据库。本文是使用Docker镜像建立数据库的方法,数据库文件映射到物理机,支持外部连接,并提供了数据备份和恢复的方法。

首先安装Docker

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update


sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


# 测试Docker是否成功运行
sudo docker run hello-world

image.png

参考 https://docs.docker.com/engine/install/ubuntu/

安装支持远程连接的mysql

  • 在 /opt/ 建立 mysql 文件夹,用于存储启动mysql 容器的相关配置/opt/mysql/conf.d,以及mysql相关的文件/opt/mysql/data
代码语言:javascript
复制
mkdir /opt/mysql

# 存放mysql配置文件
mkdir /opt/mysql/conf.d
touch /opt/mysql/conf.d/my.cnf
  • 在my.cnf填入以下内容,这里
代码语言:javascript
复制
[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"

这个my.cnf配置的目的是确保 MySQL 数据库在遇到存储引擎不可用的情况下,不会自动替换为其他可用的存储引擎,而是返回一个错误。这可以帮助开发人员在出现存储引擎问题时及时发现并解决,而不是在不知情的情况下使用了不同的存储引擎。

  • 给my.cnf 设置权限
代码语言:javascript
复制
sudo chmod 644 /opt/mysql/conf.d/my.cnf
  • 创建物理机存储mysql数据的映射目录
代码语言:javascript
复制
mkdir /opt/mysql/data

运行以下代码,启动容器

代码语言:javascript
复制
docker run -d -p 3306:3306 --name mysql-8-1 --restart unless-stopped -e MYSQL_ROOT_PASSWORD=******  -v /opt/mysql/conf.d/my.cnf:/etc/mysql/my.cnf -v /opt/mysql/data:/var/lib/mysql  mysql:8.1

这里采用了mysql:8.1的镜像, 其中的 ****** 为root用户登录密码,用自己的密码替换 ****** 即可

在mysql中, root用户默认不允许远程登录, 我们可以登录root用户进入容器,添加一个用户zhaoolee 并赋予zhaoolee所有的权限,密码为accountZhaooleePassword,请按照需求自行替换

代码语言:javascript
复制
docker exec -it mysql-8-1 mysql -uroot -p

create user 'zhaoolee' identified with mysql_native_password by 'accountZhaooleePassword';

grant all privileges on *.* to 'zhaoolee';
FLUSH PRIVILEGES;

如果你需要修改zhaoolee用户的密码,可以运行以下命令修改密码

代码语言:javascript
复制
# 修改用户密码
USE mysql;
ALTER USER 'zhaoolee'@'%' IDENTIFIED WITH mysql_native_password BY 'accountZhaooleeNewPassword';

FLUSH PRIVILEGES;

完成设置后,我们可以通过免费的DBeaver社区版,测试数据库是否连接成功

DBeaver 下载地址: https://dbeaver.io/download/

image.png

image.png

最后通过 control + p + q 退出mysql容器;

导出数据

创建一个文件夹/opt/mysql/db_back_up,存储导出的数据

代码语言:javascript
复制
mkdir -p /opt/mysql/db_back_up

比如导出数据库 wp_v2fy 的数据到 /opt/mysql/db_back_up 目录

首先登录数据库

代码语言:javascript
复制
docker exec -it mysql-8-1 mysql -uroot -p

查看wp_v2fy的数据库属性character_set_database 和 collation_database

代码语言:javascript
复制
USE wp_v2fy;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
代码语言:javascript
复制
mysql> USE wp_v2fy;
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> SHOW VARIABLES LIKE 'character_set_database';
+------------------------+---------+
| Variable_name          | Value   |
+------------------------+---------+
| character_set_database | utf8mb3 |
+------------------------+---------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_database';
+--------------------+--------------------+
| Variable_name      | Value              |
+--------------------+--------------------+
| collation_database | utf8mb3_general_ci |
+--------------------+--------------------+
1 row in set (0.00 sec)

从输出可知,character_set_database为 utf8mb3, collation_database 为utf8mb3_general_ci , 我们后续新建数据库接收数据,指定这两个参数,可以保证接收数据格式的一致性。

通过 control + p + q 退出容器;

  • 导出数据备份

通过zhaoolee账户导出数据,shell编程的单双引号意义不同,双引号内的字符串会进行变量和命令替换,而单引号内的字符串则会被视为字面值,不进行任何替换。以下几行命令中的单双引号要格外注意

代码语言:javascript
复制
DB_NAME="wp_v2fy"
TIME=$(date +"%Y_%m_%d_%H_%M_%S")
OUTPUT_FILE="/opt/mysql/db_back_up/${TIME}_${DB_NAME}.sql"
EXEC_COMMAND="exec mysqldump $DB_NAME  -uzhaoolee -p'******'"

docker exec mysql-container sh -c "$EXEC_COMMAND" > "$OUTPUT_FILE"

image.png

我们获得了名为 2023_08_12_11_36_56_wp_v2fy.sql 的数据备份文件,这个文件可以恢复到数据库。

通过.sql恢复数据库数据

如果我们的wp_v2fy数据库数据被污染,或者需要进行数据迁移,想从 2023_08_12_11_36_56_wp_v2fy.sql恢复数据,我们需要进入容器, 创建同名数据库

代码语言:javascript
复制
docker exec -it mysql-8-1 mysql -uroot -p

CREATE DATABASE wp_v2fy CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci;

image.png

运行以下命令, 将 2023_08_12_11_36_56_wp_v2fy.sql 恢复到名为 wp_v2fy的数据库, 其中的***** 用root登录密码替代

代码语言:javascript
复制
docker exec -i mysql-8-1 sh -c 'exec mysql -uroot -p"******" wp_v2fy' < /opt/mysql/db_back_up/2023_08_12_11_36_56_wp_v2fy.sql

image.png

至此,Docker版Mysql数据库的搭建,备份,迁移详细方法均编写完成。

小结

2023年,Mysql数据库依然是WordPress站长的首选数据库,云服务商低配的Mysql数据库一年也要将近300人民币,自己动手,丰衣足食,如果预算有限,同时服务器性能尚可,使用Docker自建Mysql数据库确实很有性价比。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先安装Docker
  • 安装支持远程连接的mysql
  • 在mysql中, root用户默认不允许远程登录, 我们可以登录root用户进入容器,添加一个用户zhaoolee 并赋予zhaoolee所有的权限,密码为accountZhaooleePassword,请按照需求自行替换
  • 导出数据
  • 通过.sql恢复数据库数据
  • 小结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档