1、拉取mysql8.4.0镜像
docker pullmysql:8.4.0-oraclelinux8
查看镜像
docker images
2、新建宿主机本地目录:用来挂载MySQL容器所产生的数据的目录
mkdir -p /home/admin/data/mysql /home/admin/logs/mysql /home/admin/conf/mysql
3、在/home/admin/conf/mysql
目录下面创建mysql配置文件my.cnf
[client]
#port=3306
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4[mysqld]
port=3306
#设置mysql的安装目录
#basedir=/home/admin/app/mysql-8.4.0
#设置mysql数据库的数据的存放目录
#datadir=/home/admin/data/mysql/data
#错误日志目录
#log-error=/home/admin/data/mysql/logs/error.log
#socket=/home/admin/data/mysql/tmp/mysql.sock
#pid-file=/home/admin/data/mysql/tmp/mysql.pid
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
#skip-character-set-client-handshake
skip-name-resolve
# 设置不区分大小写
lower_case_table_names=1# 创建数据表时,默认使用的存储引擎
default-storage-engine=INNODB
# 附加的内存池,用来存储 InnoDB 表的内容
#innodb_additional_mem_pool_size=3M
# 置提交日志的时机,若设置为 1,InnoDB 会在每次提交后将事务日志写到磁盘上
innodb_flush_log_at_trx_commit=1
# 来存储日志数据的缓存区的大小
innodb_log_buffer_size=2M
# 缓存的大小,InnoDB 使用一个缓冲池类保存索引和原始数据
innodb_buffer_pool_size=107M
# 日志文件的大小
innodb_log_file_size=54M
# 在 InnoDB 存储引擎允许的线程最大数
innodb_thread_concurrency=18# 默认使用“mysql_native_password”插件认证 ON开启/OFF关闭
# mysql_native_passwordmysql_native_password=ON# 回收空闲连接的时间
wait_timeout = 86400
# 允许同时访问 MySQL 服务器的最大连接数。其中一个连接是保留的,留给管理员专用的
max_connections=100
# 数据库 写入的 数据包 最大值
max_allowed_packet = 512M
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10# 查询时的缓存大小,缓存中可以存储以前通过 SELECT 语句查询过的信息,再次查询时就可以直接从缓存中拿出信息,可以改善查询效率
#query_cache_size=0
# 所有进程打开表的总数
#table_cache=256
# 内存中每个临时表允许的最大大小
tmp_table_size=35M
# 缓存的最大线程数
thread_cache_size=8
# MySQL 重建索引时所允许的最大临时文件的大小
myisam_max_sort_file_size=100G
# 重建索引时的缓存大小
myisam_sort_buffer_size=69M
# 关键词的缓存大小
key_buffer_size=55M
# MyISAM 表全表扫描的缓存大小
read_buffer_size=64K
#将排序好的数据存入该缓存中
read_rnd_buffer_size=256K
#用于排序的缓存大小
sort_buffer_size=256K#开启binlog日志
#当前为单个节点,随机设置一个ID的值
server-id=1
log-bin=mysql-bin
binlog-format=Row# 解决导入脚本时function报错问题
log_bin_trust_function_creators=1# 日志存储天数
#expire_logs_days=7 弃用
#binlog用于控制日志自动清理机制 ON 打卡 OFF关闭
#binlog_expire_logs_auto_purge=ON
#binlog可以以秒为单位进行清理 3天
#binlog_expire_logs_seconds=259200
说明:
docker安装需要注释掉下面这些内容
#设置mysql的安装目录
#basedir=/home/admin/app/mysql-8.4.0
#设置mysql数据库的数据的存放目录
#datadir=/home/admin/data/mysql/data
#错误日志目录
#log-error=/home/admin/data/mysql/logs/error.log
#socket=/home/admin/data/mysql/tmp/mysql.sock
#pid-file=/home/admin/data/mysql/tmp/mysql.pid
4、启动容器,创建MySQL实例
docker run -p 3306:3306 --name mysql8.4.0 --restart=always --privileged=true \-v /home/admin/logs/mysql:/var/log/mysql \-v /home/admin/data/mysql:/var/lib/mysql \-v /home/admin/conf/mysq:/etc/mysql/conf.d \-v /etc/localtime:/etc/localtime:ro \-e MYSQL_ROOT_PASSWORD=123456 \-d mysql:8.4.0-oraclelinux8
参数说明:
\
:这是换行符
-d
:后台运行
-p 3306:3306
:设置端口,前面端口是主机端口号,后面是容器端口
--privileged=true
: 设置容器的权限。让容器拥有宿主机的root
权限
-v /home/admin/data/mysql
: 容器卷挂载(格式:-v
要挂载的主机路径:要被挂载的容器路径)
-e MYSQL_ROOT_PASSWORD=123456
:设置MySQL的root密码,这里我设置的密码是123456
--name mysql8.4.0
:给要创建的容器起个名,不起名的话就会默认生成一个名字,不好记
mysql:8.4.0-oraclelinux8
:要运行的镜像(可以用镜像名:版本号来指定也可以用镜像id
)
使用docker ps
查看容器
查看mysql日志
docker logs 容器id或者容器名称
例如:
docker logs mysql8.4.0
docker logs ae5b3444d5d9