有谁知道是否有办法确认 MySQL 是否正在读取 my.cnf 文件?
我在机器上只有一个 my.cnf(并且没有 my.ini 文件),我在 /etc/my.cnf 中有。
当我运行时./mysqld --help --versbose
,它没有给我我在文件中设置的变量,所以我假设它没有加载它或者它正在加载一个不同的文件。
我通过将 my.cnf 设置为 777 并再次运行该命令进行了测试,这次我收到一条警告,说该文件不会被加载,因为它是全局可写的。
这是否足以暗示 my.cnf 已被加载,并且其中可能存在错误,导致未设置变量,或者是否有其他方法可以确定加载了什么(如果有)my.cnf 文件?
我是 linux 新手,我刚刚在我的 linux 机器上安装了 MySQL-server-5.1.59-1.glibc23.i386.rpm。
我想知道 my.cnf 文件存储在哪里..?my.cnf 是否会在安装时创建?
我正在使用 Fedora 核心 13
编辑:我仍然无法找到这个文件。当我问我的管理员时,他告诉我们需要复制 my-large.cnf 并放在 /etc 文件夹中......是这样......?
在my.cnf
我有:
table_cache = 524288
open_files_limit = 65535
Run Code Online (Sandbox Code Playgroud)
两者都处于 mysql 配置的最大允许值。两者都小于最大打开文件限制:
# cat /proc/sys/fs/file-max
2097152
Run Code Online (Sandbox Code Playgroud)
MySQL 变量状态:
mysql> SHOW GLOBAL STATUS LIKE 'open%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| Open_files | 193 |
| Open_streams | 0 |
| Open_table_definitions | 594 |
| Open_tables | 802 |
| Opened_files | 537248 |
| Opened_table_definitions | 4895 |
| Opened_tables | 9174 |
+--------------------------+--------+
7 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
服务器有 32GB 内存。大部分免费!
尽管如此,当我运行 mysqltuner 脚本时:
它说: …
我已经设置ft_min_word_len = 1
为my.cnf
文件,也SHOW VARIABLES LIKE 'ft_min_word%'
显示ft_min_word_len as 1
. 然后我重新加载了所有数据库表,它仍然没有搜索一个字符的单词。
我的表:
CREATE TABLE IF NOT EXISTS event (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(80) NOT NULL,
description TEXT,
time TIMESTAMP DEFAULT 0,
FULLTEXT(name)
);
Run Code Online (Sandbox Code Playgroud)
我的查询:
SELECT event.id AS eid,
event.name AS ename
FROM event
WHERE MATCH(event.name) AGAINST('+W*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的事件名称是 W.W.W. + Pavel Fajt + Vladimir 518 @ Sono
请问还有什么可能导致问题?
编辑:我正在使用 InnoDB,抱歉我之前没有提到过。
我知道有很多与此类似的问题,但似乎没有一个对我的问题有明确的答案,所以这就是我发布此内容的原因......我希望在正确的地方。
问题:
我有一个脚本,/etc/cron.daily
其中执行每日数据库备份等。只要将密码硬编码到mysqldump命令的脚本中,它就可以正常工作。
#!/bin/sh
$ mysqldump -u [uname] -p[pass] db_name > db_backup.sql
Run Code Online (Sandbox Code Playgroud)
但是,不想在脚本中使用密码,我设置了~/.my.cnf
文件 (chmod 600),其中存储了我的用户密码,因此mysqldump
脚本中的命令将是无密码的。
~/.my.cnf
[mysqldump]
password="pass"
Run Code Online (Sandbox Code Playgroud)
#!/bin/sh
$ mysqldump -u [uname] db_name > db_backup.sql
Run Code Online (Sandbox Code Playgroud)
当我以 root 身份从命令行手动运行这个新脚本时,它就像一个魅力。
sudo sh /etc/cron.daily/daily-backup-script
Run Code Online (Sandbox Code Playgroud)
但是当cron
想要运行它时,它无法转储数据库,并出现以下错误:
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost' (using password: NO) when trying to connect.
Run Code Online (Sandbox Code Playgroud)
所以,我认为cron
没有相应的权限才能执行密码的mysqldymp
脚本命令中,用密码放在~/.my.cnf
,但是脚本和密码的mysqldump
命令它是从完美用命令行工作sudo
。
迄今为止的努力:
sudo
中的mysqldump
命令前面尝试过。sudo -u …
即使安装了 memcached 和 APC,服务器也需要 20 多秒(等待时间/缓慢的 IO 响应时间)来响应 HTTP 请求。我相信这与 MYSQL 有关系,因为该站点有很多INSERT查询。
任何帮助将不胜感激。提前致谢。
avg-cpu: %user %nice %system %iowait %steal %idle
6.38 0.03 1.05 0.40 0.00 92.14
avg-cpu: %user %nice %system %iowait %steal %idle
10.37 0.00 1.61 3.14 0.00 84.87
avg-cpu: %user %nice %system %iowait %steal %idle
9.40 0.00 1.41 1.53 0.00 87.67
avg-cpu: %user %nice %system %iowait %steal %idle
10.02 0.00 1.42 1.09 0.00 87.46
avg-cpu: %user %nice %system %iowait %steal %idle
9.32 0.00 1.31 0.78 0.00 88.59 …
Run Code Online (Sandbox Code Playgroud) 以下 my.cnf 文件是否适用于具有 64GB RAM 的专用服务器(在 Debian 上)?
我在服务器上只运行一个网站,并且在某些表中插入高负载数据需要几个世纪......似乎数据库无法处理某些表锁定(50Mb 表,不是那么多)。
如果没问题,那么我将逐步分析每个查询。
任何帮助将不胜感激!
[客户]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
back_log = 50
skip-networking
max_connections = 100
max_connect_errors = 10
table_open_cache = 4096
table-definition-cache = 4096
skip-external-locking
skip-name-resolve
max_allowed_packet = 32M
binlog_cache_size = 2M
max_heap_table_size = 64M
read_buffer_size = 4M
read_rnd_buffer_size = 32M
sort_buffer_size = 16M
join_buffer_size = 8M
thread_cache_size = 20
thread_concurrency = 16
query_cache_type=1
query_cache_size = 1024M
query_cache_limit = 2M
ft_min_word_len = …
Run Code Online (Sandbox Code Playgroud) 我有一个写入密集型的网络应用程序,我买了一个 768M RAM 的 VDS
我将 bulk_insert_buffer_size 指定为 126M,其他一些参数如下:
[mysqld]
bulk_insert_buffer_size=126M
set-variable = max_connections=500
safe-show-database
max_user_connections=200
key_buffer_size = 16M
query_cache_size = 50M
tmp_table_size = 50M
max_heap_table_size = 200M
thread_cache_size = 4
table_cache = 80
thread_concurrency = 8
innodb_buffer_pool_size = 100M
innodb_log_file_size = 25M
query_cache_limit = 50M
innodb_flush_log_at_trx_commit = 2
Run Code Online (Sandbox Code Playgroud) 我以为我会很聪明并更新 my.cnf 文件以添加ft_min_word_len=2
并且没有先备份它。我永远不会再犯那个错误了。幸运的是,我们的项目仍在生产中,没有造成任何伤害。
我不知道我在那个文件中做错了什么,因为我看不到任何错误日志(/var/log/mysqld.log)。在我接触配置文件之前,MySQL 运行良好 - 好吧,我认为它是。
通过运行以下命令并重新启动 mysqld (service mysqld restart):
mv /etc/my.cnf /etc/my.cnf.backup
我再次启动并运行 - 这证明配置文件以某种方式损坏。一旦我把它放回去并重新启动服务,它就无法再次启动。
这可能没有太大帮助,但这是我的终端屏幕,显示已编辑的 my.cnf 文件:
[mysqld]
local-infile=1
atadir=/var/lib/mysql
ft_min_word_len=2
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_buffer_pool_size=2M
innodb_additional_mem_pool_size=500K
innodb_log_buffer_size=500K
innodb_thread_concurrency=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
innodb_buffer_pool_size=2M
innodb_additional_mem_pool_size=500K
innodb_log_buffer_size=500K
innodb_thread_concurrency=2
Run Code Online (Sandbox Code Playgroud)
我看不出这是哪里出了问题。显然,我已尝试删除我添加的行。
我在这里有哪些选择?如何恢复原始配置文件?
my.cnf ×9
mysql ×8
optimization ×2
cache ×1
cron ×1
innodb ×1
installation ×1
mysql-5 ×1
mysqldump ×1
password ×1
performance ×1
scripting ×1