There are two main reasons for this error message to show:
1) The MySQL query you are trying to execute takes too long and the MySQL server times out.
The solution for this issue is to optimize your database for the queries which fail.
2) You have a crashed table in your database.
The solution in this case is to repair and optimize your database.
If a particular table crashes often and repairing/optimizing it does not help, this most probably means that the table's structure is not working properly with our MySQL server setup. In such cases the easiest way to fix a crashed MyISAM table for good is to change its database engine from MyISAM to InnoDB
6:mysqldump中--default-character-set参数理解:
7:太多的sleep进程
mysql -uroot -p***后登陆数据库,show proceelist;发现有太多的sleep进程,见附件!
原因:my.cnf中的wait_timeout和interactive_timeout 设置的太大!
my.cnf中的相关设置如下:
wait_timeout = 64800
interactive_timeout = 64800
将其修改为:
wait_timeout = 100
interactive_timeout = 100
问题即可正常!
8:有一段时间测试两个数据库间同步,#我们的环境比较特殊不适合用mysql master/slave,有几天测试使用rsync同步数据库下的表,发现使用rsync同步后,表经常损坏!
首先要修复表,修复的方法:
mysqlcheck -uroot –p*** --repair --extended mydb
9:有时候为了确保数据一致性,需要刷新mysql 缓存
方法见附件:
10:有时候也可以优化数据库:
mysqlcheck -u root -p**** --auto-repair --optimize --all-databases ##自动修复优化所有数据库
11:修改使得root远程登陆
:默认情况下,不允许root远程登陆,进行下面修改后就可以使得root远程登陆
12:shell-init: error retrieving current directory: getcwd: cannot access parent
directories: No such file or directory
解决方法:
该错误表示 getcwd 命令无法定位到当前工作目录。一般来说是因为你 cd 到了某个目录之后 rm 了这个目录,这时去执行某些 service 脚本的时候就会报 getcwd 错误。只需要 cd 到任何一个实际存在的目录下在执行命令即可。
13:配置master/slave时遇到两个问题
13.1:
在slave上执行show master status;居然有显示,
原因:我在slave上也开启了log-bin文件!
解决方法:将该行注释掉,然后show master status就不会有结果显示了!
13.2:在配置master/slave时,
使用了grant all on test.* to ‘slaveuser’@’%’
identified by ‘slaveuser’; ##应该使用grant all on *.* to ‘slaveuser’@’%’ identified by ‘slaveuser’; 当然all的权限太大了,可以适当的调小!
13.3:slave-skip-errors=all
开始没有加上这个,由于master和slave上数据不一致,一条语句运行不正常就会导致master/slave 不工作,我当时的建议是在slave和master上将相关数据,然后在mster上插入,数据即可同步(但我们的环境不需要这么精细,允许有点差距!)
解决方法:在slave机器的配置文件中加入,slave-skip-errors=all 忽略这个错误
导致了就算slaveuser的密码正确也会提示密码错误!
14:为了安装mysql5.5.X 编译cmake,结果出错,见附件
15:mysql下添加一个用户,对几个数据库都有读和写权限,见附件!
16:max_allowed_packet设置问题,,但mead非要调大概值,为了不影响mysql服务的运行
于是:
set global max_allowed_packet=1024*1024*2048 ##这个表示2G的大小
但系统不允许设置为2G的大小,最大的max_allowed_packet值为1G,
mysql>show VARIABLES like
'%max_allowed_packet%';
摘录一段解释如下:
17:alter table person engine=innodb;做存储引擎转换时会造成锁表,从而影响业务,对于alter table 时会生成一个中间的文件,等转换完成了中间文件自动消
18:要注意wait_timeout设置一定要大,否则容易造成flush tables with read lock;锁不住表,打开一个终端,运行flush tables with read lock; 特别注意该终端一定不能执行exit,否则就会自动解锁
19:telnet测试mysql 3306端口的连通情况
开始怀疑防火墙有问题,再次查看,防火墙是正常的(实在不行就关闭了iptables,然后测试看看返回啥结果),其实这个返回结果是正常的!可以创建一个测试用户(利用grant),利用mysql client端登录!
20:slave机器上的表被锁定,造成show slave status \G 查看时Exec_Master_Log_Pos: ***位置一直没有变化,将相关session kill 掉即可!
锁表造成机器的负载高:锁表时和解除锁时的机器负载对比,见下图
21:show processlist时发现有大量的query end 状态的进程,见附件!
解决方法:
修改innodb_flush_log_at_trx_commit 为0 即可,这样带来了数据的不安全性!
22:赋予一个mysql 用户执行存储过程的权限,见附件
23:将表的记录写入到一个文件里面:
出错原因:目录的权限不够,放到/tmp目录下就可以了!
24:repair表的时候会生成一个中间文件,见附件!
而且repair过程中会导致表被锁住!
25:日志文件中提示,见附件
同事把read_buffer_size和read_rnd_buffer_size调成20G,日志文件里面提示见附件:显然调整的过大了,将值调适当即可!26:删除一个mysql用户
27:data目录下有#sql-**-**.ibd文件
同事在执行alter table tablename engine='innodb' 不小心中断了,在data目录下有类似于附件中的文件,我将这个文件移到另外一个目录下了,然后重启mysql结果有附件中的报错
解决方法:将该db通过mysqldump导出成sql文件,然后重新导入即可
28:修改表名
29:设置autocommit为0,在my.cnf的[mysqld]中加入
autocommit = 0 即可
30:mysql权限不正确,造成mysql.sock文件不能生成,从而有如下报错
31:内存太少的缘故,具体原因不详,其实我机器有32G内存,作为一个专用到db,我分配innodb_buffer_size为26G,但不知道为什么free -m 查看的时候,现在使用的内存很少,仅仅2G左右,当时就在mysql错误日志里有如下的报错:同时我在执行一个select * from bigtable的操作,很长时间没有出来结果,提示mysql server has gone
后来导入了一个大的sql, free -m查看时发现used项对应的已经变的很大:
[root@db3 var]# free -m
total used free shared buffers cached
Mem: 32044 31422 621 0 157 2042
-/+ buffers/cache: 29222 2821
Swap: 16087 151 15936
32:
《VM.SWAPPINESS=0在最新内核中可能会OOM,MYSQL被意外KILL》请使用RHEL/CentOS 6.4及更新版本内核的MySQL同志们注意,vm.swappiness = 0的默认行为修改了,如果继续设置vm.swappiness = 0,有可能导致系统内存溢出,从而导致MySQL被意外kill掉。
33: Sort aborted: Query execution was interrupted
原因##摘之percona pdf
34: