mysql从库上出现的奇怪错误

今天监控脚本发现从库突然停了,又报了以下错误:

Last_Error: Error 'There is no 'user'@'192.168.0.234' registered' on query. Default database: 'testdb'. Query: 'INSERT INTO testtablle(userId,uesrName)  VALUES (128,'user')'

很奇怪的错误,后来一问,原来是DBA在更新库的时候用了自己的帐号,而在从库上没有给他设置相应的帐号,这才导致从库同步失败,建立一个拥有相同权限的用户,然后重启一下slave就可以了

MySQL提示“too many connections”的解决办法

今天生产服务器上的MySQL出现了一个不算太陌生的错误“Too many connections”。平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connections参数,然后重启数据库。但
是生产服务器上数据库又不能随便重启。

没办法,只好想办法手动去释放一些没用的连接。
登陆到MySQL的提示符下,数据show processlist这个命令,可以得到所以连接到这个服务器上的MySQL连接:

mysql> show  processlist;
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| Id      | User | Host                | db      | Command | Time | State | Info              |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| 1180421 | ur   | 202.103.96.68:49754 | test1   | Sleep   |    1 |       | NULL              |
| 1180427 | ur   | 202.103.96.68:55079 | test2   | Sleep   |    1 |       | NULL              |
| 1180429 | ur   | 202.103.96.68:55187 | testdba | Sleep   |    0 |       | NULL              |
| 1180431 | ur   | 202.103.96.68:55704 | testdba | Sleep   |    0 |       | NULL              |
| 1180437 | ur   | 202.103.96.68:32825 | test1   | Sleep   |    1 |       | NULL              |
| 1180469 | ur   | 202.103.96.68:58073 | testdba | Sleep   |    0 |       | NULL              |
| 1180472 | ur   | 83.136.93.131:47613 | test2   | Sleep   |    8 |       | NULL              |
| 1180475 | root | localhost           | NULL    | Query   |    0 | NULL  | show  PROCESSLIST |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
8 rows in set (0.00 sec)

mysql>

然后,你可以看到像上面这样的MySQL数据连接列表,而且每一个都会有一个进程ID号(在上表的第一列)。我们只要输入这样的命令:

mysql> kill 1180421;
Query OK, 0 rows affected (0.00 sec)

mysql>

其中1180421为你在进程列表里找到并且要杀掉的进程号。

mysqld_multi—-管理多实例数据库

mysqld_multi是用来管理在同一台机器上监听着不同的端口和不同的socket连接的多个mysqld进程。它可以用来启动或者停止这些服务,也可以报告他们当前的状态。

要使用这个服务,我们首先得建立一个多实例对象的配置文件,格式如下:

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
[mysqld1]
socket = /tmp/mysql.sock1
port = 3307
pid-file = /var/lib/mysql1/hostname.pid1
datadir = /var/lib/mysql1
log = /var/lib/mysql1/log-file.log
log-error = /var/lib/mysql1/log-error.err
[mysqld2]
socket = /tmp/mysql.sock2
port = 3308
pid-file = /var/lib/mysql2/hostname.pid2
datadir = /var/lib/mysql2
log = /var/lib/mysql2/log-file.log
log-error = /var/lib/mysql2/log-error.err

跟普通的配置文件相比,这里首先多了一个[mysqld_multi]的配置
这个里面要配置的参数一般就是四个参数
mysqld与mysqladmin,填写你的mysqld_safe与mysqladmin的全路径就可以了。
user与password,管理帐号的用户名写密码,也就是说你需要在所有的实例中设置一个相同的用户名(密码也要相同)。

然后就是[mysqldN],N可以是任意整数,但是不能重复,代表的是实例ID(官方叫GNR)
这里面的参数就跟普通配置文件[mysqld]一样了。
我不多说了。

启动与停止指定的实例

mysqld_multi --config-file=/etc/my_multi.cnf start 1,2
mysqld_multi stop 1,2

这里的1,2就是我们前面写的N(GNR)
一般在启动的时候,我们需要指定配置文件,停止的时候不要

报告实例的状态:

mysql_multi report 1,2

关于Mysql主从数据库的设置[转]

来源:http://caiying0504.javaeye.com/blog/176432

一般使用MySQL的时候,如果数据量不大,我们都使用一台MySQL服务器,备份的时候使用mysqldump工具就可以了,但是随着业务不断发展,问题出现了:
首先:数据量往往直线上升,单独一台数据库服务器开始出现性能的瓶颈,数据访问越来越慢。
其次:备份也变得困难了,因为mysqldump是导出一份文本文件,而数据量特别大的时候,这样的备份往往需要很长时间,可能有人会说,我们可以直接通过拷贝数据文件来备份数据库,这样很方便,快捷,不错,这样是比mysqldump方便快捷,但是,直接拷贝数据文件备份的方式要求我们必须先关闭mysql服务,然后再拷贝数据文件,否则,你拷贝的文件很可能是坏的。而实际运行的mysql服务往往要求在任何时候都不可以停止服务,所以这样的备份方式在此情况下不可行。
如果你遇到了类似上面的问题,你就可以使用建立MySQL主从服务器的方式来解决,下面先来看看主从服务器的设置:
前提:MySQL主从服务器最好使用相同的软件版本,以避免不不可预期的故障。

Read More »

MySQL中无法删除的表

用phpmyadmin莫名其妙的建立了一个名为“myhnet?class”的数据库
却发现,这个数据库我无法在MySQL命令行中删除
不管用什么命令,都无法删除这个库
最后,还是在phpmyadmin中删除了
不知道正确的格式是什么。。
反正,下面三种写法全是错的,如果您知道,麻烦您把正确的格式写上,谢谢

 mysql> drop database myhnet?class
 mysql> drop database 'myhnet?class'
 mysql> drop database "myhnet?class"

MySQL表最大能达到多少

MySQL 3.22限制的表大小为4GB。由于在MySQL 3.23中使用了MyISAM存储引擎,最大表尺寸增加到了65536TB(2567 1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。

InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。

在下面的表格中,列出了一些关于操作系统文件大小限制的示例。这仅是初步指南,并不是最终的。要想了解最新信息,请参阅关于操作系统的文档。

操作系统 文件大小限制
Linux 2.2-Intel 32-bit 2GB (LFS: 4GB)
Linux 2.4+ (using ext3 filesystem) 4TB
Solaris 9/10 16TB
NetWare w/NSS filesystem 8TB
win32 w/ FAT/FAT32 2GB/4GB
win32 w/ NTFS 2TB(可能更大)
MacOS X w/ HFS+ 2TB

在Linux 2.2平台下,通过使用对ext2文件系统的大文件支持(LFS)补丁,可以获得超过2GB的MyISAM表。在Linux 2.4平台下,存在针对ReiserFS的补丁,可支持大文件(高达2TB)。目前发布的大多数Linux版本均基于2.4内核,包含所有所需的LFS补 丁。使用JFS和XFS,petabyte(千兆兆)和更大的文件也能在Linux上实现。然而,最大可用的文件容量仍取决于多项因素,其中之一就是用于 存储MySQL表的文件系统。

Windows用户请注意: FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS。

在默认情况下,MySQL创建的MyISAM表允许的最大尺寸为4GB。你可以使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的最大尺寸。创建了表后,也可以使用ALTER TABLE更改这些选项,以增加表的最大允许容量。

处理MyISAM表文件大小的其他方式:

·         如果你的大表是只读的,可使用myisampack压缩它。myisampack通常能将表压缩至少50%,因而,从结果上看,可获得更大的表。此外,myisampack还能将多个表合并为1个表。

MySQL包含一个允许处理MyISAM表集合的MERGE库,这类MyISAM表具有与单个MERGE表相同的结构。