我们的专用服务器正在运行一个大型 Magento 商店,其中有一个大约 250MB 的 MySQL 数据库。
服务器规格被列为具有 5 个 Xeon 2Ghz 处理器(4MB 缓存)和 12GB 内存。
我原以为上述规范足以非常快速地运行 Magento,但是尽管该站点并不慢,但它确实没有应有的那么快。
当前 MySQL my.cnf 文件如下:
skip-innodb
ft_min_word_len=3
query_cache_limit = 4M
query_cache_size = 16M ## 32MB for every 1GB of RAM
query_cache_type = 1
max_user_connections = 50
max_connections = 50
interactive_timeout = 300
wait_timeout = 200
connect_timeout = 200
thread_cache_size = 32
key_buffer_size = 64M ## 128MB for every 1GB of RAM
join_buffer_size = 1M
max_connect_errors = 20
max_allowed_packet = 12M
table_cache = 1024 …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以即时更改innodb_buffer_pool_size。
看起来缓冲池已在我的服务器上过度分配,现在正在交换。我已经在从服务器上更改了这个值,重新启动了 MySQL 守护进程,现在一切看起来都很好 - 但是我不能让主服务器脱机
我不确定是否至少可以刷新 inndb 缓冲区以释放一些内存?
# ps aux --sort -vsz | head -n2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 2064 14.6 93.8 17369060 15328044 ? Sl Jul22 7096:48 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysql/mysql-error.log --pid-file=/var/lib/mysql/mysql.pid --socket=/var/lib/mysql/mysql.sock --port=3306
# free -m
total used free shared buffers cached
Mem: 15949 15786 163 0 4 104
-/+ buffers/cache: 15677 272
Swap: 4095 346 3749
Run Code Online (Sandbox Code Playgroud) 由于某种原因,我的 MySQL 无法再连接。我正在运行三个 WordPress 网站,我需要保存表格。这才是我真正真正真正关心的。
这是问题所在:
root@dev:/var/log/mysql# mysql ERROR 2002 (HY000): 无法通过 socket '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
用phpMyAdmin登录时也显示同样的错误..
所有网站都显示此错误:
建立数据库连接时出错
我有 6 个 WordPress 网站在 1 个 EC2 实例上运行。所有网站都连接到 1 个相同 RDS 实例中的数据库。
今天早些时候,最大网站的流量达到顶峰,RDS 实例陷入瓶颈——CPU 利用率在一个多小时内达到 100%。它影响了我所有的网站,因为它们需要永远加载。
为了防止此类问题再次发生,以下哪项最重要,因此我首先要投入时间和精力?
(我将在以后工作,我现在只需要优先考虑)
对我网站的用户体验有何影响?一些快速搜索表明我应该限制到我的 Web 服务器的并发连接数,但这不会阻止用户访问我的网站吗?
更多背景:
我已经做了什么:
我是在浪费资源,还是根本没有足够的资源用于我的网站——或者更确切地说,我如何自己回答这个问题?
我正在尝试在 ubuntu 12.10 中安装 mysql。从http://dev.mysql.com/downloads/mysql/下载了“MySQL-5.6.12-1.linux_glibc2.5.i386.rpm-bundle” 。提取它并尝试使用rpm -i MySQL-server-5.6.12-1.linux_glibc2.5.i386. 既然不可能,就用sudo alien -i MySQL-server-5.6.12-1.linux_glibc2.5.i386。对目录 MySQL-5.6.12-1.linux_glibc2.5.i386.rpm-bundle 中的所有其他文件执行相同操作。然后在终端中尝试“mysql”命令,但它显示错误
强调文本
mysql: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)Fatal error in defaults handling. Program aborted
检查 /etc/mysql 目录。里面唯一的文件是 my.cnf 内容:
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One …Run Code Online (Sandbox Code Playgroud) 为了允许来自外部的连接,我编辑将默认值/etc/mysql/my.cnf更改为. 但是更改后,mysql 服务将无法启动。当我检查 mysql 错误日志时,它有这个:-bind-address127.0.0.154.200.xx.xx
131030 12:27:53 [Note] Server hostname (bind-address): '54.200.xx.xx'; port: 3306
131030 12:27:53 [Note] - '54.200.xx.xx' resolves to '54.200.xx.xx';
131030 12:27:53 [Note] Server socket created on IP: '54.200.xx.xx'.
131030 12:27:53 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
131030 12:27:53 [ERROR] Do you already have another mysqld server running on port: 3306 ?
131030 12:27:53 [ERROR] Aborting
Run Code Online (Sandbox Code Playgroud)
服务器位于 Amazon EC2 上,运行 Ubuntu 12.04 LTS。知道问题是什么吗?
ubuntu@ip-172-31-xx-xxx:~$ ifconfig
eth0 Link …Run Code Online (Sandbox Code Playgroud) 另一位技术人员最近在我们的 LAMP 服务器上重新安装了我们的 mysql,现在我不能再使用 mysqldump 了。
# mysqldump
The program 'mysqldump' is currently not installed. You can install it by typing:
apt-get install mysql-client-5.5
Run Code Online (Sandbox Code Playgroud)
所以我这样做:
apt-get install mysql-client-5.5
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
percona-server-server-5.5 : Depends: percona-server-client-5.5 (>= 1:5.5.36-rel34.2-648.precise) but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages …Run Code Online (Sandbox Code Playgroud) 使用 bash 脚本执行远程 MySQL 查询时,如何知道该命令是否成功。在本地,它会返回一个退出代码。然而,远程它似乎发送查询,如果它能够连接到远程 MySQL 数据库,它就认为它成功了。有什么办法可以在远程执行时查看输出,比如在本地执行时。这是脚本:
#!/bin/bash
RemoveID=`mysql -u root -proot -h 192.168.1.56 -e "delete from table where ID = '$1'"`
Run Code Online (Sandbox Code Playgroud) 使用此命令我更改了 root 密码
mysqladmin -u root 密码 fg$pkh@567fghu
现在我无法访问mysql。这是因为 mysql 解析的字符不是我期望的吗?
此外,我完全删除并安装了 mysql,问题仍然存在。
如何删除mysql以便摆脱密码?
这是我的服务器内存图

您可以在图中看到,每次我重新启动 mysqld 时,swap 都会变为零。但随着时间的推移而增加。
如果我将 innodb 缓冲池放在大尺寸交换中,则上升速度会更快,如果我降低它,则交换上升会更慢。

mysql ×10
innodb ×2
wordpress ×2
amazon-ec2 ×1
amazon-rds ×1
bash ×1
centos ×1
magento ×1
memory ×1
optimization ×1
password ×1
sql ×1
swap ×1
ubuntu-12.10 ×1
website ×1