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/
如果配置日志文件,则要创建相应的日志文件,还要将日志文件的所有者改成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/
配置优化建议
在生产环境中,对于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`,等待连接的超时时间。 在正式环境中,建议根据服务器的硬件配置和业务需求来调整这些参数,以确保数据库的性能和稳定性。同时,定期备份数据库和监控日志文件也是非常重要的 。
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