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

news2024/10/6 19:29:12

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

首先安装Docker

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
mkdir /opt/mysql

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

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

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

运行以下代码,启动容器

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,请按照需求自行替换

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用户的密码,可以运行以下命令修改密码

# 修改用户密码
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,存储导出的数据

mkdir -p /opt/mysql/db_back_up

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

首先登录数据库

docker exec -it mysql-8-1 mysql -uroot -p

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

USE wp_v2fy;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
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编程的单双引号意义不同,双引号内的字符串会进行变量和命令替换,而单引号内的字符串则会被视为字面值,不进行任何替换。以下几行命令中的单双引号要格外注意

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恢复数据,我们需要进入容器, 创建同名数据库

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登录密码替代

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数据库确实很有性价比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/871198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP MM学习笔记19- SAP中的库存类型,以及 保留在库的利用场景

SAP中有3种库存类型。 1&#xff0c;利用可能在库&#xff08;非限制使用库存&#xff09; 2&#xff0c;品质检查中在库&#xff08;质检库存&#xff09; 3&#xff0c;保留在库&#xff08;已冻结库存&#xff09; 这3种库存类型在库存移动的时候&#xff0c;是可以互相转…

4. 软件开发的环境搭建

目录 1. 搭建环境 1.1 检查 JDK 1.2 检查 MySQL 数据库 1.3 检查 Maven 1.4 检查 GITEEGIT 1.5 安装插件 1.5.1 安装 Spring Boot Helper 1.5.2 安装 lombok 1.6 创建仓库 1.6.1 登录 GITEE 创建仓库并复制仓库地址 1.6.2 克隆到本地 1.7 创建工程 1.7.1 设置编码…

Unity 框架学习--1

由浅入深&#xff0c;慢慢演化实现框架 两个类的实现代码完全一样&#xff0c;就只有类名或类型不一样的时候&#xff0c;而且还需要不断扩展&#xff08;未来会增加各种事件&#xff09;的时候&#xff0c;这时候就用 泛型 继承 来提取&#xff0c;继承解决扩展的问题&#…

【Quarkus技术系列】打造基于Quarkus的云原生微服务框架实践(1)

前提介绍 本系列文章主要讲解如何基于Quarkus技术搭建和开发"专为Kubernetes而优化的Java微服务框架"的入门和实践&#xff0c;你将会学习到如何搭建Quarkus微服务脚环境及脚手架&#xff0c;开发Quarkus的端点服务&#xff0c;系统和应用层级的配置介绍与Quarkus的…

JavaWeb_总体介绍

文章目录 1.总括2.JavaWeb项目架构 1.总括 2.JavaWeb项目架构

【Linux】DNS协议——应用层

DNS协议 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 DNS背景 TCP/IP中通过IP地址和端口号的方式&#xff0c;来确定网络中一个主机上的一个程序。但IP地址是一长串数字&#xff0c;并不…

阿里云账号注册流程_多种注册方法_图文详解

阿里云账号怎么注册&#xff1f;阿里云账号支持手机号注册、阿里云APP注册、支付宝和钉钉多种注册方式&#xff0c;账号注册后需要通过实名认证才可以购买或使用云产品&#xff0c;阿里云百科来详细说下不同途径注册阿里云账号图文流程&#xff1a; 目录 阿里云账号注册流程 …

利用python实现网络设备配置批量上传和批量下载功能

利用python实现网络设备配置批量上传和批量下载功能 利用ensp实现网络设备和物理主机互通配置网络设备配置批量上传功能配置批量下载功能常见问题 提示&#xff1a; 本文章代码所使用目录均使用相对目录&#xff0c;只需将配置存放目录和文件下载目录&#xff08;已用符号标出…

Java:正则表达式书写规则及相关案例:检验QQ号码,校验手机号码,邮箱格式,当前时间

正则表达式 目标:体验一下使用正则表达式来校验数据格式的合法性。需求:校验QQ号码是否正确&#xff0c;要求全部是数字&#xff0c;长度是(6-20&#xff09;之间&#xff0c;不能以0开头 首先用自己编写的程序判断QQ号码是否正确 public static void main(String[] args) {Sy…

走近ChatGPT与类似产品:原理解析与比较

目录 1. 引言1.1 技术的进步与自然语言处理1.2 ChatGPT的崭新概念 2. ChatGPT: 一览众山小2.1 GPT-3.5架构简介2.2 ChatGPT的学习与训练2.3 文本生成的工作原理 3. 市场上类似产品调研3.1 对话式人工智能产品分类3.2 文心一言3.3 讯飞星火 4. 应用前景与局限性展望4.1 ChatGPT的…

STM32 F103C8T6学习笔记6:IIC通信__驱动MPU6050 6轴运动处理组件—一阶互补滤波

今日主要学习一款倾角传感器——MPU6050,往后对单片机原理基础讲的会比较少&#xff0c;更倾向于简单粗暴地贴代码&#xff0c;因为经过前些日子对MSP432的学习&#xff0c;对原理方面也有些熟络了&#xff0c;除了在新接触它时会对其引脚、时钟、总线等进行仔细一些的研究之外…

790. 多米诺和托米诺平铺

题目描述&#xff1a; 主要思路&#xff1a; class Solution { public:int numTilings(int n) {long long f[n][4],mod1e97;f[0][0]1;f[0][1]f[0][2]0;f[0][3]1;for(int i1;i<n;i){f[i][0]f[i-1][3];f[i][1] (f[i-1][0]f[i-1][2])%mod;f[i][2] (f[i-1][0]f[i-1][1])%mod;f…

嵌入式技术,就在你的手边!

嵌入式技术&#xff0c;听起来多么高大上的名词&#xff0c;同时它也确实是当今信息技术的前沿领域&#xff0c;但这并不意味着它就距离我们很遥远。 事实恰恰相反&#xff0c;在当今科技发展迅猛的时代&#xff0c;嵌入式技术成为了人们生活中不可或缺的一部分。它以其小巧、高…

手撕Java集合——链表

链表 一、链表概念特性二、不带头单向非循环链表实现&#x1f351;1、定义结点&#x1f351;2、打印链表&#x1f351;3、使用递归逆序打印链表&#x1f351;4、头插&#x1f351;5、尾插&#x1f351;6、指定位置插入&#x1f351;7、查找是否包含关键字key是否在单链表当中&a…

C#,数值计算——Dynpro的计算方法与源程序

给定向量nstate&#xff0c;其整数值是每个状态中的状态数阶段&#xff08;第一和最后阶段为1&#xff09;&#xff0c;并给定函数成本&#xff08;j&#xff0c;k&#xff0c;i&#xff09;返回在阶段i的状态j和的状态k之间移动的成本阶段i1&#xff0c;此例程返回与nstate长度…

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(8)

1005 0 vs 1 双端队列暴力模拟,时间复杂度为O(n*T) 首先预处理0的右边第一个0的下标,1的右边第一个1的下标,0的左边第一个0的下标,1的左边第一个1的下标 然后进行模拟 如果当前是zero的轮次,那么就看双端队列的两端 如果两头都是1,那么one赢,如果1头是0,1头是1,那么只能选择0 如…

概率图模型(Probabilistic Graphical Model,PGM)

概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;&#xff0c;是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布&#xff0c;进行有效的推理和学习&#xff0c;以及解决各种实际问题&#xff0c;如图…

计算机基础概论

一、计算机的组成 1.计算机组成的五大部件 &#xff08;1&#xff09;运算器&#xff1a;也叫算术逻辑单元&#xff0c;完成对数据的各种常规运算&#xff0c;如加减乘除&#xff0c;也包括逻辑运算&#xff0c;位移&#xff0c;比较等。 &#xff08;2&#xff09;控制器&a…

掌握Python的X篇_34_Python朗读文字

各种广告中说python是人工智能的主宰&#xff0c;其实这更多是噱头的成分&#xff0c;但是python确实可以做很多的事情&#xff0c;本篇将会介绍利用pythonAI平台来合成声音。今天将会用到的是百度。 文章目录 1. baiToVoice2. 注册appid3. 合成代码 1. baiToVoice 使用百度A…

详解Mysql——第一篇/连接查询

mysql的连接查询&#xff0c;相必在网上都能找到很多的教程&#xff0c;博主今天不做老话常谈&#xff0c;不走重复路线 1.建表 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id) – –课程编…