我有一个大约6GB的数据库,一个表占据了几乎所有的空间,当服务器被高负载击中时,该表不断崩溃,所以我不得不停止MySQL服务器并修复它,然后重新启动它。有什么原因和原因吗?我怎样才能减轻这个问题?只有当服务器突然获得大量访问者时,才会发生这种情况。参见上一次崩溃是何时在高峰期间发生的示例图像:

我的托管服务提供商在我要求他们进行调查时说了以下几点:
在检查时,我们发现数据库的大小较高,所以当网站负载较高时,会存在大量的数据库查询,因此数据库崩溃的几率很高。
无
total used free shared buff/cache available
Mem: 8342 1451 586 451 6304 6180Table - Rows - Engine - encoding - Size
Stats: 22 020 753 MyISAM utf8_unicode_ci 6,0 GB Server: Localhost via UNIX socket
Servertyp: MariaDB
Server connection: SSL is not being used Dokumentation
Serverversion: 10.3.27-MariaDB - MariaDB Server
Protokollversion: 10[mysql]
# CLIENT #
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
log-error=/var/lib/mysql/server.err
performance-schema=0
table_open_cache=2000
innodb_strict_mode="ON"
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
open_files_limit=40000
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysql.pid
# MyISAM #
key-buffer-size = 64M
myisam-sort-buffer-size = 64M
myisam-recover-options = FORCE
# SAFETY #
skip-external-locking
max-allowed-packet = 128M
max-connect-errors = 1000000
innodb = FORCE
# DATA STORAGE #
datadir = /var/lib/mysql/
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 32
max-connections = 500
thread-cache-size = 286
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 512
group-concat-max-len = 1048576
# INNODB #
#innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 512M
innodb-log-buffer-size = 16M
innodb-flush-log-at-trx-commit = 2
innodb-file-per-table = 1
innodb-buffer-pool-size = 4G
# LOGGING #
# log-queries-not-using-indexes = 1
# slow-query-log = 1
# slow-query-log-file = /var/lib/mysql/mysql-slow.log
max_allowed_packet=268435456
innodb_file_per_table=1
[mysqldump]
quick
max_allowed_packet = 128M
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout发布于 2020-12-17 23:05:31
现在,将key_buffer_size提高到1G。
从长远来看,从MyISAM迁移到InnoDB (并更改缓存大小)。这至少可以消除“修理”的需要。
当问题发生时,运行的调皮查询是什么?还是你认为这是“太多的用户”绊倒对方?我见过这种情况。快速的解决方法是将max_connections减少到200,同时减少web服务器维护的“子”的数量--这将防止首先建立太多的连接。
如果这些没有帮助,请按照下面的说明提供更多信息:http://mysql.rjweb.org/doc.php/mysql_分析
在[mysqld]下进行更改(或添加)。这是重要的服务器的名称。myisamchk是一个单独的实用程序。
这将更改一个表:
ALTER TABLE t ENGINE=InnoDB;有关调整key_buffer_size和innodb_buffer_pool_size:http://mysql.rjweb.org/doc.php/memory的帮助,请参阅以下内容
https://serverfault.com/questions/1046672
复制相似问题