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

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

作者头像
zhaoolee
发布于 2023-08-13 03:21:24
发布于 2023-08-13 03:21:24
3.6K00
代码可运行
举报
文章被收录于专栏:木子昭的博客木子昭的博客
运行总次数:0
代码可运行

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

首先安装Docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
mkdir /opt/mysql

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

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

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

运行以下代码,启动容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
# 修改用户密码
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
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /opt/mysql/db_back_up

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

首先登录数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it mysql-8-1 mysql -uroot -p

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE wp_v2fy;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
Trie - 211. Add and Search Word - Data structure design
211. Add and Search Word - Data structure design Design a data structure that supports the following two operations:
ppxai
2020/09/23
2640
Leetcode 211 Add and Search Word - Data structure design
Design a data structure that supports the following two operations: void addWord(word) bool search(word) search(word) can search a literal word or a regular expression string containing only letters a-z or .. A . means it can represent any one letter.
triplebee
2018/01/12
5730
Leetcode 211: Add and Search Word - Data structure design
https://blog.baozitraining.org/2019/03/leetcode-solution-211-add-and-search.html
包子面试培训
2019/04/30
7330
golang刷leetcode 字符串(5)添加与搜索单词 - 数据结构设计
search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。. 可以表示任何一个字母。
golangLeetcode
2022/08/02
1700
添加与搜索单词 - 数据结构设计
请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。
狼啸风云
2023/12/03
2080
LeetCode 211. 添加与搜索单词 - 数据结构设计(Trie树)
void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。
Michael阿明
2020/07/13
4210
LeetCode 211. 添加与搜索单词 - 数据结构设计(Trie树)
LeetCode 211. Add and Search Word - Data structure design(字典树)
字典树。 class WordDictionary { public: int map[100005][26]; int tag[100005]; int num; /** Initialize your data structure here. */ WordDictionary() { memset(map,0,sizeof(map)); memset(tag,0,sizeof(tag)); num
ShenduCC
2020/02/19
4040
LeetCode 211.添加与搜索单词(数据结构设计) - JavaScript
search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。
心谭博客
2020/04/21
4620
字典树概念与题型解析
这次讲一个不经常被人提起的数据结构 - 字典树,虽说知名度不高,但是这个数据结构可以解决其他数据结构所不能解决,或者是比较难解决的问题,而且性能方面,相对于其他的功能类似的数据结构会更优,文章会从概念与基本实现,性能分析,题型解析三大方向来介绍字典树。
五分钟学算法
2019/10/18
6160
【设计数据结构】Trie 运用题
这是 LeetCode 上的「211. 添加与搜索单词 - 数据结构设计」,难度为「中等」。
宫水三叶的刷题日记
2022/04/07
5090
【设计数据结构】Trie 运用题
Leetcode 212 Word Search II 字典树 + 回溯
Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell
triplebee
2018/01/12
5420
LeetCode 0208 - Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods.
Reck Zhang
2021/08/11
2560
数据结构之Trie字典树
Trie 树,也叫“字典树”或“前缀树”。顾名思义,它是一个树形结构。但与二分搜索树、红黑树等不同的是,Trie 树是一种多叉树,即每个节点可以有 m 个子节点。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。
端碗吹水
2021/01/29
8570
算法细节系列(23):回溯
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/72655010
用户1147447
2019/05/26
6140
☆打卡算法☆LeetCode 211. 添加与搜索单词 - 数据结构设计 算法解析
大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。
恬静的小魔龙
2022/09/27
2450
☆打卡算法☆LeetCode 211. 添加与搜索单词 - 数据结构设计  算法解析
Trie - 208. Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods.
ppxai
2020/09/23
5560
【图解算法】模板+变式——带你彻底搞懂字典树(Trie树)
接下来将对经典的字典树进行代码实现;接着做几个变体题目深入理解字典树的强大;最后回到日常生活,瞧瞧字典树怎样融入到了我们的生活之中 >_<
全栈程序员站长
2022/10/04
1.4K0
【图解算法】模板+变式——带你彻底搞懂字典树(Trie树)
LeetCode 0212 - Word Search II
Given a 2D board and a list of words from the dictionary, find all words in the board.
Reck Zhang
2021/08/11
2000
Leetcode 208 solution: Implement Trie (Prefix Tree)
https://blog.baozitraining.org/2019/04/leetcode-solution-208-implement-trie.html
包子面试培训
2019/04/30
6250
Leetcode 题目解析:211. 添加与搜索单词 - 数据结构设计
在考察算法题时,我们往往离不开数据结构。而常见和常用的数据结构,以堆、栈、单/双链表、HashMap、各种二叉树(二叉树、平衡二叉树、搜索二叉树、红黑树)最为常见。另外,像bitmap等也比较多,尤其是需要位操作的时候。但还有一些数据结构也会占有一席之地,例如树中的Trie树(字典树),在检索类题目中也非常常见。
程序员架构进阶
2021/11/04
6400
相关推荐
Trie - 211. Add and Search Word - Data structure design
更多 >
LV.1
TencentGame Developer
目录
  • 首先安装Docker
  • 安装支持远程连接的mysql
  • 在mysql中, root用户默认不允许远程登录, 我们可以登录root用户进入容器,添加一个用户zhaoolee 并赋予zhaoolee所有的权限,密码为accountZhaooleePassword,请按照需求自行替换
  • 导出数据
  • 通过.sql恢复数据库数据
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档