07-Mysql容器环境搭建

简介: 本文介绍了MySQL的Docker环境搭建全过程,因CPU兼容性问题选用8.4.0-oraclelinux8镜像,详细说明了容器卷映射、配置文件设置、容器启动及数据库导入方法,并涵盖用户权限配置、数据备份与恢复、程序连接配置等关键操作,助力高效部署与管理MySQL数据库。

Mysql环境搭建

Docker镜像

Mysql的官方镜像中,当前的LTS版本是8.4.1,基于的Linux版本是Oracle Linux9,但是客户提供的服务器的CPU不支持 x86_64 V2,只支持 x86_64,所以不能使用该版本。故采用 8.4.0-oraclelinux8 版本的镜像。

docker pull mysql:8.4.0-oraclelinux8


准备映射的容器卷

Mysql需要映射出来的容器卷有:

  • /var/log/mysql:存储日志信息
  • /var/lib/mysql:存储数据库数据
  • /etc/mysql/conf.d:存储配置信息
  • /root/mysql_workspace/mysql-files:用于mysql的LOAD DATA INFILE导入数据


准备对应文件夹:

mkdir -p /root/mysql_workspace/log
mkdir -p /root/mysql_workspace/data
mkdir -p /root/mysql_workspace/conf
mkdir -p /root/mysql_workspace/mysql-files


准备配置文件

在/root/mysql_workspace/conf文件夹(即映射到容器的/etc/mysql/conf.d文件夹)中创建MySql的配置文件my.cnf:

[client]
default-character-set=utf8mb4 
[mysqld]
collation_server = utf8mb4_bin
character_set_server = utf8mb4
skip-name-resolve 
log_bin_trust_function_creators=1
lower_case_table_names=1
max_connections=500
table_open_cache=10000
group_concat_max_len=100000
# innodb日志文件大小,不要超过可用内存的一半
innodb_log_file_size = 2G
# 缓存池大小,一般设置为可用内存的60% - 80%
innodb_buffer_pool_size = 4G
# 开启慢查询日志,慢查询时间阈值设置为5秒,日志路径设置到/var/lib/mysql下
slow_query_log = 1
long_query_time = 5
slow_query_log_file = /var/lib/mysql/slow_query.log
# bin日志保存时间(天,旧版5.x的mysql可用)
expire_logs_days = 3
# bin日志保存时间(秒,8.x的mysql可用)
binlog_expire_logs_seconds=86400


启动容器

启动mysql-master容器:

docker run -d \
  -p 8306:3306 \
  --name mysql-master \
  --privileged=true \
  --restart always \
  -v /root/mysql_workspace/log:/var/log/mysql \
  -v /root/mysql_workspace/data:/var/lib/mysql \
  -v /root/mysql_workspace/conf:/etc/mysql/conf.d \
  -v /root/mysql_workspace/mysql-files:/var/lib/mysql-files \
  -e MYSQL_ROOT_PASSWORD=root \
  mysql:8.4.0-oraclelinux8


预警Mysql数据库导入

创建用户和数据库

进入容器:

docker exec -it mysql-master /bin/sh

使用root用户登录数据库:

mysql -uroot -proot

创建用户、数据库、授权:

create user 'myproject'@'%' identified by 'myproject';  -- 创建用户
create database myproject character set utf8mb4  DEFAULT COLLATE utf8mb4_bin;  -- 创建数据库,使用utf8mb4编码,排列方式采用utf8mb4_bin(区分大小写的排列方式)
grant all privileges on myproject.* to 'myproject'@'%';  -- 授权myproject用户对myproject库的权限
-- sql文件中,创建的function需要使用super权限
grant SUPER on *.* to 'myproject'@'%';   -- 授权SUPER权限时,需要授权*.*
grant SYSTEM_USER on *.* to 'myproject'@'%';   
grant select on mysql.help_topic to 'myproject'@'%';  -- 授权使用行转列函数
GRANT FILE ON *.* TO 'myproject'@'%'; -- 授权做Load data infile
-- 刷新权限
flush privileges;
-- 查看授权
SHOW GRANTS FOR 'myproject'@'%';


导入数据

将公司产品的myproject.sql文件上传到服务器上,导入到mysql-master容器中:

docker cp myproject.sql mysql-master:/

进入docker容器:

docker exec -it mysql-master bash

使用myproject用户登录:

# -u用户名 -p密码 数据库名 -A快速打开(不加该参数时mysql会先读取一遍这个库的所有表用于提示)
mysql -umyproject -pmyproject myproject -A

使用myproject数据库,导入:

use myproject;
source /myproject.sql


程序应用中配置连接

context.xml:

<Resource name="jdbc/default" auth="Container"
              type="javax.sql.DataSource" maxTotal="30" maxIdle="10" maxWaitMillis="100000"
              testOnBorrow="false" validationQuery="select 1" testWhileIdle="true" timeBetweenEvictionRunsMillis="30000" numTestsPerEvictionRun="10"
              removeAbandonedOnBorrow="true" removeAbandonedTimeout="60000"
              logAbandoned="true" username="myproject" password="myproject"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://192.168.xxx.xxx:8306/myproject?autoReconnect=true" />


数据库备份

导出

Mysql使用mysqldump进行数据库备份。

常用语句示例:

# 备份全部数据库的数据和结构
mysqldump -uroot -proot -A > /data/mydb.sql
# 备份mydb数据库的数据和机构
mysqldump -uroot -proot mydb > /data/mydb.sql
# -t 只备份表数据
# -d 只备份表结构
mysqldump -uroot -proot mydb -t > /data/mydb.sql
# 备份多个数据库,使用--databases指定
mysqldump -uroot -proot --databases db1 db2 > /data/mydb.sql
# 备份数据库的指定表 t1、t2
mysqldump -uroot -proot mydb t1 t2 > /data/mydb.sql
# 导出存储过程
# -ntd 不导出表结构和数据
mysqldump  -uroot -proot -ntd -R myproject > /data/mydb.sql


导入

导入方式1 :

在命令行直接进行导入

mysql -umyproject -pmyproject myproject < /data/mydb.sql


导入方式2:

登入mysql之后,通过sql的source指令及逆行还原:

source /data/mydb.sql
目录
相关文章
|
关系型数据库 MySQL 数据库
使用 Docker 安装 MySQL 8
使用 Docker 安装 MySQL 8
3879 4
|
Kubernetes Linux API
[没接触过kubevirt?]15分钟快速入门kubevirt
什么是kubevirt? kubevirt是一个容器方式运行虚拟机的项目。`kubevirt`是附加`kubernetes`集群上的,它是通过 `CustomResourceDefinition(CRD)`部署到`Kubernetes API`变成资源对象。使用方式类似创建`deploy、pod`......这些资源清单。
6409 0
[没接触过kubevirt?]15分钟快速入门kubevirt
|
11月前
|
存储 NoSQL 算法
10-Docker安装Redis
本文介绍Docker安装Redis单机与集群部署,涵盖配置映射、数据持久化及3主3从集群搭建。深入解析Redis集群存储算法:哈希取余、一致性哈希与哈希槽,重点说明槽位分配机制及16384个槽的设计原理,并演示主从扩缩容操作流程。
1010 0
|
11月前
|
Java Maven 数据安全/隐私保护
06-nexus私仓环境搭建
本文详细介绍Nexus Repository Manager OSS的安装与配置,涵盖JDK环境准备、服务部署、用户创建及启动操作。指导用户搭建Maven和Docker私有仓库,实现jar包与镜像的上传下载,并配置匿名访问与本地客户端信任。支持多种仓库类型,适用于企业级制品管理。
574 0
|
11月前
|
网络协议
02 | 协议:怎么设计可扩展且向后兼容的协议?
本文深入讲解RPC协议的设计原理,从“透明化”出发,剖析协议在应用层的作用。通过对比HTTP协议,揭示RPC为何需设计私有、高效、可扩展的协议,并详解消息边界、序列化方式、协议头结构及扩展机制,强调协议设计中兼容性与性能的平衡,助力构建高性能分布式系统。(238字)
194 5
 02 | 协议:怎么设计可扩展且向后兼容的协议?
|
XML JSON 人工智能
Error while extracting response for type [class xxx] and content type application/xml;charset=UTF-8
Error while extracting response for type [class xxx] and content type application/xml;charset=UTF-8
2997 0
|
11月前
|
存储 开发工具 git
05-Gitlab容器环境搭建
本文介绍如何通过Docker搭建Gitlab CE(社区版)环境。包含拉取镜像、创建持久化目录、运行容器并映射配置、数据和日志卷,以及访问Gitlab并初始化项目的方法。详细说明了SSH与HTTP访问配置、初始密码获取,并提供本地代码上传的两种方式,帮助快速部署并使用私有代码仓库。
286 1
|
11月前
|
jenkins Java 持续交付
02-Jenkins配置编译项目
本文介绍如何在Jenkins中配置编译任务,实现从GitLab拉取代码,使用Maven/Node构建,通过Docker打包镜像并推送至CCE镜像仓库,最后利用kubectl更新云上服务。涵盖后台Java模块、前端Vue项目及跨服务器镜像导出方案,支持手动与自动触发构建,提升持续集成效率。
415 0
|
SQL 分布式计算 大数据
一张图,详解大数据技术架构
一张图,详解大数据技术架构
|
TensorFlow 算法框架/工具 Android开发
使用YOLOv5进行工业检测(如裂纹、划痕、破损等)
使用YOLOv5进行工业检测(如裂纹、划痕、破损等)
4569 1

热门文章

最新文章