Docker容器安装MySQL数据库

拉取Mysql数据库镜像

bash 复制代码
-- 拉取最新的MySQL数据库镜像
docker pull mysql

-- 拉取指定版本的MySQL数据库镜像
docker pull mysql:8.3.0

查看拉取的MySQL数据库镜像

bash 复制代码
docker images

编写MySQL配置文件(注意配置文件后缀是.cnf)

sql 复制代码
vi /docker/mysql/conf/my.cnf
sql 复制代码
[client]
# 端口号
port=3306
 
[mysql]
no-beep
# 配置了 MySQL 客户端的默认字符集
default-character-set=utf8mb4
 
[mysqld]
# 端口号
port=3306
# 数据目录
datadir=/var/lib/mysql
# 设置了 MySQL 服务器的字符集为 UTF-8
character-set-server=utf8mb4
# 设置了 MySQL 服务器的排序规则为 utf8mb4_unicode_ci,通常用于支持国际化和多语言字符的正确排序
collation-server=utf8mb4_unicode_ci
# 用于禁用客户端字符集握手,允许客户端和服务器之间的字符集设置更加灵活
skip-character-set-client-handshake
# 禁用了主机名解析,以提高连接性能
skip-name-resolve
# 默认存储引擎
default-storage-engine=INNODB
# 将 SQL 模式设置为严格
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#  最大连接数
max_connections=1024
# 表缓存
table_open_cache=2000
# 表内存
tmp_table_size=16M
# 线程缓存
thread_cache_size=10
# 设置大小写不敏感
lower_case_table_names=1
# 设置默认时区
default_time_zone='+8:00'
 
# myisam设置
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=8M
key_buffer_size=8M
read_buffer_size=0
read_rnd_buffer_size=0
 
# innodb设置
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=8M
innodb_log_file_size=48M
innodb_thread_concurrency=33
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
# 其他设置
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000

安装MySQL数据库镜像

bash 复制代码
安装最新版本的数据库
sudo docker run -p 3306:3306 --name mysql \
-v /docker/mysql/log:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql

安装指定版本的数据库
sudo docker run -p 3306:3306 --name mysql \
-v /docker/mysql/log:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.3.0
复制代码
docker run:在docker中启动一个容器实例
        -d:该容器在后台运行
        -p 3306:3306:容器与主机端口映射
        --name mysql:容器运行后的名称
        -v /docker/mysql/log:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /docker/mysql/log目录下
        -v /docker/mysql/data:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /docker/mysql/data目录下
        -v /docker/mysql/conf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 docker/mysql/conf目录下
        -e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root
        mysql:8.3.0  :需要运行的容器名称以及版本号(最新版本的数据库省略:后面的版本)

查看进程(如果按照以上的步骤执行进程名称是mysql)

bash 复制代码
docker ps -a

进入docker容器中的MySQL数据库并登录

bash 复制代码
进入docker容器中的MySQL数据库。格式:docker exec -it mysql名称 bash

docker exec -it mysql bash

登录mysql(使用root账号登录),需要单独输入密码
mysql -u root -p

查看/修改远程访问权限

bash 复制代码
sql命令:
进入数据库
use mysql;

查看用户和连接
select host,user from user;

-- 修改用户和连接

-- 刷新
flush privileges;

把root用户的密码改成 mysql_native_password 模式,即可远程连接

设置/取消开机启动

复制代码
-- 获取MySQL容器ID
docker ps

-- 设置开机启动
docker update --restart=always 容器ID

-- 取消开机启动
docker update --restart=no 容器ID

启动MySQL

bash 复制代码
-- 启动mysql
docker start mysql

重启mysql

docker restart mysql

bash 复制代码
-- 重启mysql
docker restart mysql

停止mysql

docker stop mysql

bash 复制代码
-- 停止mysql
docker stop mysql

常用命令

复制代码
-- 查看MySQL日志
docker logs mysql
相关推荐
2401_896732135 小时前
MySQL小笔记
mysql
程序员清风6 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律7 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵7 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅8 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_8 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界10 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB10 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛10 小时前
MySQL的操作
数据库·mysql
猫咪很可爱11 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle