当前位置:   article > 正文

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

ubuntu20.4安装docker以及mysql

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

首先安装Docker

  1. sudo apt-get update
  2. sudo apt-get install ca-certificates curl gnupg
  3. sudo install -m 0755 -d /etc/apt/keyrings
  4. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  5. sudo chmod a+r /etc/apt/keyrings/docker.gpg
  6. echo \
  7. "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  8. "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  9. sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  10. sudo apt-get update
  11. sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  12. # 测试Docker是否成功运行
  13. 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
  1. mkdir /opt/mysql
  2. # 存放mysql配置文件
  3. mkdir /opt/mysql/conf.d
  4. touch /opt/mysql/conf.d/my.cnf
  • 在my.cnf填入以下内容,这里
  1. [mysqld]
  2. 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,请按照需求自行替换

  1. docker exec -it mysql-8-1 mysql -uroot -p
  2. create user 'zhaoolee' identified with mysql_native_password by 'accountZhaooleePassword';
  3. grant all privileges on *.* to 'zhaoolee';
  4. FLUSH PRIVILEGES;

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

  1. # 修改用户密码
  2. USE mysql;
  3. ALTER USER 'zhaoolee'@'%' IDENTIFIED WITH mysql_native_password BY 'accountZhaooleeNewPassword';
  4. 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

  1. USE wp_v2fy;
  2. SHOW VARIABLES LIKE 'character_set_database';
  3. SHOW VARIABLES LIKE 'collation_database';
  1. mysql> USE wp_v2fy;
  2. Reading table information for completion of table and column names
  3. You can turn off this feature to get a quicker startup with -A
  4. Database changed
  5. mysql> SHOW VARIABLES LIKE 'character_set_database';
  6. +------------------------+---------+
  7. | Variable_name | Value |
  8. +------------------------+---------+
  9. | character_set_database | utf8mb3 |
  10. +------------------------+---------+
  11. 1 row in set (0.00 sec)
  12. mysql> SHOW VARIABLES LIKE 'collation_database';
  13. +--------------------+--------------------+
  14. | Variable_name | Value |
  15. +--------------------+--------------------+
  16. | collation_database | utf8mb3_general_ci |
  17. +--------------------+--------------------+
  18. 1 row in set (0.00 sec)

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

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

  • 导出数据备份

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

  1. DB_NAME="wp_v2fy"
  2. TIME=$(date +"%Y_%m_%d_%H_%M_%S")
  3. OUTPUT_FILE="/opt/mysql/db_back_up/${TIME}_${DB_NAME}.sql"
  4. EXEC_COMMAND="exec mysqldump $DB_NAME -uzhaoolee -p'******'"
  5. 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恢复数据,我们需要进入容器, 创建同名数据库

  1. docker exec -it mysql-8-1 mysql -uroot -p
  2. 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数据库确实很有性价比。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/335928?site
推荐阅读
相关标签
  

闽ICP备14008679号