mysql 8.0.18的docker安装

1.拉取镜像

sudo docker pull mysql:8.0.18

编辑配置文件

/home/cy/soft/mysql/conf/mysql.conf

简单配置

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.1/en/server-configuration-defaults.html

[mysqld]

#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.1/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
# innodb缓冲池大小
innodb_buffer_pool_size=5600M
 
# innodb缓冲池块大小
innodb_buffer_pool_chunk_size=700M
 
# innodb缓冲池实例数
innodb_buffer_pool_instances=8

# 连接操作缓冲区,默认256K

join_buffer_size = 8M

# 排序操作缓冲区,默认256K
sort_buffer_size = 8M

# 顺序读取缓冲区,默认128K

read_buffer_size = 4M

# 随机读取缓冲区,默认128K
read_rnd_buffer_size = 8M

skip-host-cache
skip-name-resolve

datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=NULL
pid-file=/var/run/mysqld/mysqld.pid

!includedir /etc/mysql/conf.d/
View Code

如果配置日志文件,则要创建相应的日志文件,还要将日志文件的所有者改成polkitd,或者修改文件的权限为777

cd  /home/cy/soft/mysql/log

touch slow.log

touch mysql-err.log

touch genlog.log

chmod 777 slow.log

chmod 777 mysql-err.log

chmod 777 genlog.log

有日志的配置

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.1/en/server-configuration-defaults.html

[mysqld]
#与主从复制,id生成,日志生成有关
server_id = 1
#日志设置
#这里的mysql-bin是二进制日志文件的前缀名,完整的日志文件名将包括这个前缀和一个序列号,例如mysql-bin.000001。
log_bin = /var/log/mysql/mysql-bin
log_bin_index = /var/log/mysql/mysql-bin.index
#这个参数用于设置每个二进制日志文件的最大大小。当日志文件达到这个大小时,它会滚动到下一个日志文件。默认值通常为1GB
max_binlog_size = 100M
#用于记录二进制格式,innodb一般的行用ROW,STATEMENT用于非事务MyISAM,MIXED混合
binlog_format = ROW
#这个参数用于设置二进制日志文件的过期天数。过期的日志文件将被自动删除。默认情况下,这个值为0,表示日志文件不会自动过期
binlog_expire_logs_seconds = 2592000
#错误日志记录了MySQL服务器的错误信息。可以通过以下配置设置错误日志的路径:
log_error = /var/log/mysql/mysql-err.log
#慢查询日志记录了执行时间超过特定阈值的查询。
#开启慢日志
slow_query_log=1
#慢日志位置
slow_query_log_file = /var/log/mysql/slow.log
#慢日志时间
long_query_time=5
#通用查询日志记录了所有发送到MySQL服务器的语句。一般不开启,测试环境开启
#开启一般日志
general_log=1
#一般日志位置
general_log_file = /var/log/mysql/genlog.log
#设置默认字符集
character-set-server=utf8mb4
#设置默认排序规则
collation-server=utf8mb4_unicode_ci

#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.1/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
# innodb缓冲池大小
innodb_buffer_pool_size=5600M
 
# innodb缓冲池块大小
innodb_buffer_pool_chunk_size=200M
 
# innodb缓冲池实例数
innodb_buffer_pool_instances=8

# 连接操作缓冲区,默认256K

join_buffer_size = 8M

# 排序操作缓冲区,默认256K
sort_buffer_size = 8M

# 顺序读取缓冲区,默认128K

read_buffer_size = 4M

# 随机读取缓冲区,默认128K
read_rnd_buffer_size = 8M

datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=NULL
pid-file=/var/run/mysqld/mysqld.pid

!includedir /etc/mysql/conf.d/
View Code

 配置优化建议

在生产环境中,对于MySQL 8.0的配置,以下是一些常见的配置建议:

1. **基本设置**- 设置`port`为3306,指定MySQL服务的端口。
   - 设置`basedir`和`datadir`,分别为MySQL的安装目录和数据存放目录。
   - 设置`max_connections`为200,允许最大连接数。
   - 设置`character-set-server`为`utf8mb4`,服务端使用的字符集。
   - 设置`default-storage-engine`为`INNODB`,创建新表时将使用的默认存储引擎。
   - 设置`default_authentication_plugin`为`mysql_native_password`,指定默认身份验证插件 。

2. **缓冲池设置**- 设置`innodb_buffer_pool_size`,InnoDB缓冲池大小,通常设置为物理内存的50%-75%- 设置`key_buffer_size`,用于MyISAM索引的缓冲区大小。

3. **日志设置**- 设置`log_error`,错误日志的文件路径。
   - 设置`slow_query_log`为`ON`,启用慢查询日志。
   - 设置`slow_query_log_file`,慢查询日志文件的路径。
   - 设置`long_query_time`,定义慢查询的时间阈值。
   - 设置`log_queries_not_using_indexes`,记录未使用索引的查询。

4. **安全设置**- 设置`sql_mode`,SQL模式,用于控制SQL语句的语法和数据验证。
   - 修改root用户密码,并删除匿名用户,移除远程访问权限,刷新权限 。

5. **性能优化**- 设置`table_open_cache`,提高表缓存性能。
   - 设置`read_buffer_size`、`read_rnd_buffer_size`、`sort_buffer_size`等,优化会话内存设置。
   - 设置`innodb_thread_concurrency`、`innodb_buffer_pool_instances`等,优化InnoDB线程并发控制。

6. **身份验证插件**- 设置`default_authentication_plugin`,指定默认身份验证插件。

7. **客户端设置**- 设置`default-character-set`,客户端默认字符集。
   - 设置`port`,客户端连接的端口。

8. **其他配置**- 设置`max_allowed_packet`,单个查询包的最大大小。
   - 设置`interactive_timeout`和`wait_timeout`,等待连接的超时时间。

在正式环境中,建议根据服务器的硬件配置和业务需求来调整这些参数,以确保数据库的性能和稳定性。同时,定期备份数据库和监控日志文件也是非常重要的 。
View Code

 

2.运行docker

sudo docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /home/cy/soft/mysql/log:/var/log/mysql \
-v /home/cy/soft/mysql/data:/var/lib/mysql \
-v /home/cy/soft/mysql/conf/mysql.conf:/etc/mysql/my.cnf \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.18

3.查看日志

sudo docker logs -f 78ffe50725abf4f8ef862de8e5f5890961a70a820ed39952b5a28a00b26f3af9

也可以进入容器查看binlog日志

mysqlbinlog --start-datetime="2024-03-01 00:00:00" --stop-datetime="2024-11-02 00:00:00" --database=wx --base64-output=decode-rows --verbose /var/lib/mysql/binlog.000002 > /var/lib/mysql/outputfile.sql

4.mysql登录

mysql -h localhost -P 3306 -u root

5.mysql进入容器

sudo docker exec -it 78ffe50725abf4f8ef862de8e5f5890961a70a820ed39952b5a28a00b26f3af9 /bin/bash

6.java连接mysql

出现“Public Key Retrieval is not allowed

禁用 SSL/TLS 协议,在 JDBC 连接串中添加 allowPublicKeyRetrieval 参数并设置为 true 来允许公钥检索。这样一来,即使禁用了 SSL/TLS 协议,客户端仍然可以通过此参数获取服务器的公钥,从而避免“Public Key Retrieval is not allowed”错误

          url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver 

 

posted @ 2024-05-27 22:17  24601  阅读(53)  评论(0编辑  收藏  举报