我在 Windows 2008 机器 (3GB RAM) 上安装了 MySQL 5.0。我的服务器经常崩溃 (几乎每天一次),总是出现以下错误:
Changed limits: max_open_files: 2048 max_connections: 800 table_cache: 619
我没有使用繁重的 InnoDB .ini 文件,尽管我正在重新考虑是否应该使用?我担心大的配置更改会使我当前的网站停止工作。我该怎么办?
以下是我当前的 ini 设置:
default-character-set=latin1
default-storage-engine=INNODB
max_connections=800
query_cache_size=84M
table_cache=1520
tmp_table_size=30M
thread_cache_size=38
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=30M
key_buffer_size=129M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_additional_mem_pool_size=6M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=3M
innodb_buffer_pool_size=250M
innodb_log_file_size=50M
innodb_thread_concurrency=10
以下是来自 phpMyAdmin 的一些额外信息:
服务器:MYSERVER(通过 TCP/IP 的本地主机)
服务器版本:5.0.90-community-nt
协议版本:10
MySQL 字符集:UTF-8 Unicode(utf8)
Microsoft-IIS/7.0
MySQL 客户端版本:5.0.90
PHP 扩展:mysqli
根据我的研究,这个错误似乎表明操作系统硬编码限制不断受到限制,我应该使用 innoDB 重型 .ini 文件。但是,我不知道这对使用 MySQL 的网站有何影响。下面是我正在考虑替换的重型 innoDB 配置,有人能告诉我这对我现有数据库的网站意味着什么吗?它们都是 InnoDB,甚至所有表都是 InnoDB。我走对路了吗?
[客户端]
端口 = 3306
套接字 = /tmp/mysql.sock
[mysqld]
端口 = 3306
套接字 = /tmp/mysql.sock
back_log = 50
max_connections = 100
max_connect_errors = 10
table_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 8
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default_table_type = MYISAM
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=mysql-bin
log_slow_queries
long_query_time = 2
log_long_format
server-id = 1
key_buffer_size = 32M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M myisam_sort_buffer_size =
128M myisam_max_sort_file_size
= 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
skip-federated
skip-bdb
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 2G
innodb_data_file_path = ibdata1:10M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 8M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
[mysqldump]
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
答案1
我认为 MySQL 不应该毁掉你的操作系统,即使它表现不佳。你所描述的并不是普通的确保服务器健康。在最坏的情况下,MySQL实例应该死亡,而不是整个服务器。
您应该调查可能的硬件问题,例如冷却不足或 RAM 芯片损坏。因此您应该先排除这些问题。
如果您同意这确实可能是硬件问题,您可以采取以下措施:
- 改善冷却效果。也许可以打开服务器机箱并让其以这种方式运行以证明该理论。
- 刻录一张 memcheck live CD 并进行快速 RAM 检查。这需要重新启动,但我认为您的服务器每天都会为您提供机会,对吧?;-)
祝你好运! - Yves
答案2
它应该可以提高所有使用 innodb 数据库的站点的响应和性能。它们不会因为这些更改而停止工作。我建议在非高峰时段进行调整。配置列表是一个好的开始,但最终您必须对其进行微调以最好地满足您的需求。我利用 phpmyadmin 页面来打开服务器。
我会将 innodb_buffer_pool_size = 2G 更改为 1GB,因为你只有 3GB 的 RAM,而你需要足够的内存来运行系统
答案3
更改 INI 文件时要小心。
您展示的新版本不包含一些重要设置,例如默认字符集;您只显示更改的部分吗?
此外,如果在操作系统因打开文件数为 2048 而崩溃时收到警告,那么将打开文件数限制更改为 8192 似乎很奇怪。