mysql 问题汇总记录

1、 数据库报错

Packet for query is too large (3513 > 1024). You can change
this value on the server by setting the max_allowed_packet’ variable.

原因:一次查询的数据量大于了 max_allowed_packet这个值的设定。
解决:
1.、暂时调高 max_allowed_packet

查询 max_allowed_packet 设置
show VARIABLES like’%max_allowed_packet%’
(很妥协,很纠结的办法)
进入mysql server
在mysql 命令行中运行
set global max_allowed_packet = 210241024*10
然后关闭掉这此mysql server链接,再进入。
show VARIABLES like ‘%max_allowed_packet%’;
查看下max_allowed_packet是否编辑成功

打开my.ini,文件
查找max_allowed_packet,有的文件没有,没有的话增加
[mysqld]
max_allowed_packet = 20M
然后重启,mysql

2、被人利用udf攻击, 删除mysql库中func表删除

不过貌似没解决根本,继续观察中。。。

3、启动时增加参数 skip-grant-tables :顾名思义,就是在启动mysql时不启动grant-tables,授权表。 忘记管理员密码后有用。

操作方法:
1、杀掉原来进行着的mysql:
rcmysqld stop
或者:
service mysqld stop
或者:
kill -TERM mysqld
2、以命令行参数启动mysql:
/usr/bin/mysqld_safe --skip-grant-tables &
3、修改管理员密码:
use mysql;
update user set password=password(‘yournewpasswordhere’) where user=‘root’;
flush privileges;
exit;
4、杀死mysql,重启mysql

4、mysql 连接出错 ‘mysqladmin flush-hosts’

文章参考:http://blog.csdn.net/huchunbin/article/details/14126111

原因:
  同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;

说明mysqld已经得到了大量(max_connect_errors)的主机’hostname’的在中途被中断了的连接请求。在 max_connect_errors次失败请求后,mysqld认定出错了(象来自一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令 mysqladmin flush-hosts。

解决:

show VARIABLES like’%max_connect_errors%’;

1.使用mysqladmin flush-hosts命令清除缓存,命令执行方法如下:
命令行或终端:mysqladmin -u root -p flush-hosts
接着输入root账号密码即可

2.修改mysql配置文件,在[mysqld]下面添加 max_connect_errors=1000,然后重启mysql

5、MySql ibdata1文件太大如何缩小

原文地址:http://blog.okbase.net/haobao/archive/1213.html

PS:对于启用了innodb_file_per_table 的参数选项之后,在每个表对应的.idb文件内只是存放了数据、索引和插入缓冲,而撤销(undo)信息,系统事务信息,二次写缓冲等还是存放在了原来的共享表空间内

MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G,对一些没用的表进行清空:
truncate table xxx;
然后optimize table xxx; 没有效果
因为对共享表空间不起作用。
mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。
如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。对于某些应用来说,并不是太合适。因此要把此文件缩小。
无法自动收缩,必须数据导出,删除ibdata1,然后数据导入,比较麻烦,因此需要改为每个表单独的文件。
解决方法:数据文件单独存放(共享表空间如何改为每个表独立的表空间文件)。
步骤如下:

1)备份数据库
从命令行进入MySQL Server 5.0\bin
备份全部数据库,执行命令
D:>mysqldump -q -umysql -ppassword --add-drop-table --all-databases > c:/all.sql
做完此步后,停止数据库服务。

2)找到my.ini或my.cnf文件
linux下执行 ./mysqld --verbose --help | grep -A 1 ‘Default options’
会有类似显示:
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf /usr/local/service/mysql3306/etc/my.cnf
windows环境下可以:
mysqld --verbose --help > mysqlhelp.txt
notepad mysqlhelp.txt
在里面查找Default options,可以看到查找my.ini的顺序,以找到真实目录

3)修改mysql配置文件
打开my.ini或my.cnf文件
[mysqld]下增加下面配置
innodb_file_per_table=1
验证配置是否生效,可以重启mysql后,执行
show variables like ‘%per_table%’
看看innodb_file_per_table变量是否为ON

4)删除原数据文件
删除原来的ibdata1文件及日志文件ib_logfile*,删除data目录下的应用数据库文件夹(mysql文件夹不要删)

5)还原数据库
启动数据库服务
从命令行进入MySQL Server 5.0\bin
还原全部数据库,执行命令mysql -uusername -pyourpassword < c:/all.sql
经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。
PS:对于启用了innodb_file_per_table 的参数选项之后,在每个表对应的.idb文件内只是存放了数据、索引和插入缓冲,而撤销(undo)信息,系统事务信息,二次写缓冲等还是存放在了原来的共享表空间内。

MySql-bin.0000X日志文件的方法
登录mysql root 账号后 reset master;

mysqldump -uroot -plw@2015 -h127.0.0.1 --events --ignore-table=mysql.events --all-databases > /mountDisk/lw_iot_2016_10_20.sql

如何关闭MySQL的日志功能:
修改/etc/my.cnf 文件,找到
log-bin=mysql-bin

binlog_format=mixed
再这两行前面加上#,将其注释掉

4:日志的删除
对于比较繁忙的OLTP系统,由于每天生产日志量大,这些日志如果长时间不清理,将会对磁盘空间带来很大的浪费,因此,定期删除日志是DBA维护MySQL数据库的一个重要工作内容,下面将介绍几种删除日志的常见方法
(1):
执行“reset master;”命令,该命令将删除所有二进制日志,新日志的编号从“000001” 开始,命令如下
Mysql>reset master;
(2):
执行“Purge master logs to ‘mysql-bin.’” 命令,该命令将删除“” 编号之前的所有日志,下列中删除了“mysql-bin.000001”之前编号的所有日志
Mysql>purge master logs to ‘mysql-bin.000015;
从结果中发现,编号000015之前的所有日志都已经删除
(3):
执行“purge master logs before ‘yyyy-mm-dd hh24:min:ss’”命令,该命令将删除日期为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志,下列中删除了日期在“2010-05-22 01:00:00”之前的所有日志
Mysql>purge master logs before ‘2010-05-22 01:00:00’’;
(4):
设置参数—expire_logs_days=#(days),此参数的含义是设置日志的过期天数,过来指定的天数后日志将会被自动删除,这样将有利于减少DBA管理日志的工作量。
#vi /etc/my.cnf
[mysqld]
–expire_logs_days=3
这样,3天前的日志都会被删除,系统自动删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值