在尝试启动 MySQL 时,我一直在尝试解决以下问题:
2022-01-27T09:47:14.547946Z 0 [Warning] [MY-010139] [Server] Changed limits: max_open_files: 1024 (requested 8161)
2022-01-27T09:56:22.047681Z 0 [Warning] [MY-010142] [Server] Changed limits: table_open_cache: 431 (requested 4000)
...
2022-01-27T09:56:22.265005Z 0 [Warning] [MY-010091] [Server] Can't create test file /var/lib/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
我尝试过提高我的limits.conf
文件值,但是/etc/service
无论我在运行时进行什么更改,这些值都超过 10000(在某些情况下是 65535):
ulimit -Sa | grep "open files"
结果总是:
open files (-n) 1024
任何帮助都将不胜感激,但我只是看不到其他解决方案?
我还没有数据库,我甚至还没有设法启动 MySQL 来登录一次。
MySQL 版本 8.0.27 在 WSL 上的 Ubuntu 20.04.3 LTS 上运行
答案1
WSL 没有systemd
。这就是为什么您的更改/etc/systemd/system/mysqld.service.d/limits.conf
未应用的原因。因此ulimit -n
返回1024
。
您可以/etc/security/limits.conf
通过添加以下行来编辑该文件以增加每个用户的限制:
* soft nofile 10000
* hard nofile 10000
通过重新启动mysql
服务,将读取并应用上述文件。要重新启动mysql
服务,请执行:
sudo service mysql restart
用户的限制将更改mysql
。要检查这一点,您可以运行以下命令:
ps -ef|grep -e ^mysql
mysql 90 1 0 18:28 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql 250 90 0 18:28 ? 00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=statie-ac-0027.pid
for pid in `ps -ef|grep -e ^mysql|awk '{print $2}'` ; do echo pid=$pid user=`ps -ef|awk '{if( $2 == '$pid' ) print $1}'`; sudo prlimit -p $pid --nofile ; done
pid=90 user=mysql
RESOURCE DESCRIPTION SOFT HARD UNITS
NOFILE max number of open files 10000 10000 files
pid=250 user = mysql
RESOURCE DESCRIPTION SOFT HARD UNITS
NOFILE max number of open files 10000 10000 files
附言
对于普通用户,我们似乎具有相同的状态(没有文件限制,没有读取更改),因为默认情况下不执行登录。但是如果你运行:
su <username>
然后读取限制文件并ulimit -n
返回10000
当前用户。
聚苯硫醚
我的回答受到以下启发: