1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在
在 linux 下,经常出现的情况就是使用 VBB 这种论坛系统时,出现缓慢,mysql 假死状态,sleep进程过多等等现像。导致几十个用户,就把系统搞定了。
其实这是 mysql 配置上的问题, 默认的 linux 中, mysql 的配置是 my-large.cnf 配置,该配置适合大型服务器。有高内存,比如2G,4G内存的,适合使用,而一般512M内存 的就不行了。它会占用512M内存来保存系统 mysql 的进程,这些进程长期堆质,并不释放,导致系统缓慢。所以,把配置改变成为 my-small.cnf ,小型配置就可以了。它的配置如下:
# Example mysql config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld deamon
# doesn't use much resources.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# One can in this file use all long options that the program supports.
# If you want to know which options a program support, run the program
# with --help option.
# The following options will be passed to all MySQL clients
[client]
#password = 你的密码
port = 3306
socket = /tmp/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
server-id = 1
# Uncomment the following if you want to log updates
#log-bin
# Uncomment the following if you are NOT using BDB tables
#skip-bdb
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
# Set .._log_file_size to 25 % of buffer pool size
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=50
[mysqldump]
quick
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
set-variable = key_buffer=8M
set-variable = sort_buffer=8M
[myisamchk]
set-variable = key_buffer=8M
set-variable = sort_buffer=8M
[mysqlhotcopy]
interactive-timeout
以上配置足够 你的系统高速运行 mysql 了,sleep的进程,很快就被回收,不占资源,这非常适合小型服务器。一般个人托管的服务器也很适合。
其实这是 mysql 配置上的问题, 默认的 linux 中, mysql 的配置是 my-large.cnf 配置,该配置适合大型服务器。有高内存,比如2G,4G内存的,适合使用,而一般512M内存 的就不行了。它会占用512M内存来保存系统 mysql 的进程,这些进程长期堆质,并不释放,导致系统缓慢。所以,把配置改变成为 my-small.cnf ,小型配置就可以了。它的配置如下:
# Example mysql config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld deamon
# doesn't use much resources.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# One can in this file use all long options that the program supports.
# If you want to know which options a program support, run the program
# with --help option.
# The following options will be passed to all MySQL clients
[client]
#password = 你的密码
port = 3306
socket = /tmp/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
server-id = 1
# Uncomment the following if you want to log updates
#log-bin
# Uncomment the following if you are NOT using BDB tables
#skip-bdb
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
# Set .._log_file_size to 25 % of buffer pool size
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=50
[mysqldump]
quick
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
set-variable = key_buffer=8M
set-variable = sort_buffer=8M
[myisamchk]
set-variable = key_buffer=8M
set-variable = sort_buffer=8M
[mysqlhotcopy]
interactive-timeout
以上配置足够 你的系统高速运行 mysql 了,sleep的进程,很快就被回收,不占资源,这非常适合小型服务器。一般个人托管的服务器也很适合。
![](http://blog.51cto.com/image/skin/artType01.jpg)
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
linux下,或者说*inx下有个top命令,可以让我们实时的监控进程运行状态,包括cpu占用,内存占用等。
常用的管理指令像c查看命令行参数,s调整刷新时间,M以内存排序,P以cpu排序,N以进程排序就不说了,这里咱们说说查看指定进程资源占用这一特殊情况。比如说:我只查看apache或者mysql的资源占用情况。怎样才能从一堆的信息中找到这个有用信息呢?
1.特定用户
一般像apache或者mysql这些服务我们都会用专门的帐号来运行它们,这样的话我们可以直接利用top的U or u指令,指定特定的用户。我们就可以得到想要的信息了。
![](https://i-blog.csdnimg.cn/blog_migrate/7218ecbb509db873d79602216ece7363.png)
这种方法个人感觉很强大,因为它可以适应指定用户进程数不断变动的情况例如apache。
2.指定进程
因为习惯上,我们会将很多服务都以root的身份运行。这种情况怎么挑出来有用的信息呢?那我们就要找不同点了,是内存占用高,cpu占用高还是进程id高?对于启动以后不再增加进程的程序笔者又想出来一招。开源的工具总会给你惊喜,只有你想不到的,没有它做不到的。到底怎么办呢?仔细的读了几遍top的man,发现了一个有用的参数-p。而且它支持同时传入多个pid。
![](https://i-blog.csdnimg.cn/blog_migrate/9b26ae622d9a81e98767b353487d7baf.png)
于是一条接近无敌的指令出现了:top -p `pgrep mysql |xargs perl -e "print join ',',@ARGV"
![](https://i-blog.csdnimg.cn/blog_migrate/157763d4ba3bfebdf61014c41efdb779.png)
分析一下:本例以mysql为例。先通过pgrep取得所有包含关键字mysql的进程id,然后通过一句perl指令把得到的进程组合成top -p参数可以接受的格式,然后传给top。
这条指令虽然达到了目的,但是个人觉得有点繁锁。使用了一句perl命令主要是不知道怎么用bash命令把得到的进程ip变成pid1,pid2,pid3这样的形式,笔者在这一步卡了十多分钟。另外得到结果以后怎么通过管道+xargs传给top -p笔者也没有想出来,希望有更简捷方法的朋友指点:)
本文出自 “rainbird” 博客,转载请与作者联系!