我有一台运行 mysql 5.7 和一些 webapps 的 Ubuntu 18.04 服务器。Mysql 占用了大量内存并强制使用交换空间。由于内存使用率过高,我们遇到了几次致命崩溃。我正在努力减少此服务器上运行的其他程序的内存需求,但我很好奇 mysql 是否明显配置有误。
我跑了mysqltuner.pl,并采纳了其中的一些建议。
8 个核心、20GB RAM、8GB 交换
/etc/mysql/mysql.conf.d/mysqld.cnf
# MySQL 数据库服务器配置文件。
[客户端]
端口 = 3306
套接字 = /var/run/mysqld/mysqld.sock[mysqld_safe]
套接字 = /var/run/mysqld/mysqld.sock
nice = 0[mysqld]
# * 基本设置
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking绑定地址 = 0.0.0.0
# * 微调
key_buffer_size = 16M
max_allowed_packet = 256M
thread_stack = 192K
thread_cache_size = 8
myisam_recover_options = BACKUP# * 查询缓存配置
query_cache_size = 0# * 日志记录和复制
log_error = /var/log/mysql/error.logexpire_logs_days = 10
max_binlog_size = 100M#* InnoDB
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=8
答案1
您的 mysql 调谐器的建议假设这是一个专用的 mysql 服务器,并且该服务器不处理 webapps。
这意味着innodb_buffer_pool_size=10G
MYSQL 将始终尝试使用 10GB 内存(如果可以),以最大限度地提高其性能。
如果你需要更多内存供服务器上的其他程序使用,你应该减少innodb_buffer_pool_size,并将其设置为较低的内存量。但请记住,这可能会严重损害数据库的性能。
值得一提的是,在生产环境中,通常认为最佳做法是将数据库和 Web 应用程序运行在不同的服务器上。