MySQL遇到的小问题


        这篇博客,如同linux上遇到的小问题一样,一直更新,把平时项目中遇到的MySQL问题及解决方法都贴在这,以供自己以后查看。


        1、项目中有的表字段用到了枚举型(enum),如“`is_show` enum('0','1') NOT NULL COMMENT '是否显示 0否 1是'”,这时要查询表中显示的记录,一开始是这么写的,“SELECT * FROM tablename WHERE is_show = 1”,可实际得到的数据却是未显示的,仔细查看了下建表语句,发现应该要加上引号,否则会被认为是0的,“SELECT * FROM tablename WHERE is_show = "1"”。


        2、以root身份进入mysql内,没有发现mysql库,可能是权限没有了,退出去,关掉mysql进程,以“/www/mysql/bin/mysqld -uroot --skip-grant-tables”方式启动

service mysqld stop
/www/mysql/bin/mysqld -uroot --skip-grant-tables
mysql
use mysql;
update user set Select_priv ='Y' where user = 'root';
update user set Insert_priv ='Y' where user = 'root';
update user set Update_priv ='Y' where user = 'root';
update user set Delete_priv ='Y' where user = 'root';
update user set Create_priv ='Y' where user = 'root';
update user set Drop_priv ='Y' where user = 'root';
update user set Reload_priv ='Y' where user = 'root';
update user set Shutdown_priv ='Y' where user = 'root';
update user set Process_priv ='Y' where user = 'root';
update user set File_priv ='Y' where user = 'root';
update user set Grant_priv ='Y' where user = 'root';
update user set References_priv ='Y' where user = 'root';
update user set Index_priv ='Y' where user = 'root';
update user set Alter_priv ='Y' where user = 'root';
update user set Show_db_priv ='Y' where user = 'root';
update user set Super_priv ='Y' where user = 'root';
update user set Create_tmp_table_priv ='Y' where user = 'root';
update user set Lock_tables_priv ='Y' where user = 'root';
update user set Execute_priv ='Y' where user = 'root';
update user set Repl_slave_priv ='Y' where user = 'root';
update user set Repl_client_priv ='Y' where user = 'root';
update user set Create_view_priv ='Y' where user = 'root';
update user set Show_view_priv ='Y' where user = 'root';
update user set Create_routine_priv ='Y' where user = 'root';
update user set Alter_routine_priv ='Y' where user = 'root';
update user set Create_user_priv ='Y' where user = 'root';
update user set Event_priv ='Y' where user = 'root';
update user set Trigger_priv ='Y' where user = 'root';
update user set Create_tablespace_priv ='Y' where user = 'root';
flush privileges;
exit;

#停止刚刚那个mysqld进程,再重启mysql
ps aux | grep mysqld
kill 进程
service mysqld start

        3、重装mysql前,一定得备份下数据表,mysiam引擎的好说,innodb的除了备份库名字的目录外,还的备份ibdata文件,因为innodb引擎表的数据和索引存在ibdata内。


        4、导入sql文件时,报“Got a packet bigger than 'max_allowed_packet' bytes”,在my.cnf中的[MySQLd]下面加上max_allowed_packet=10M,这个值大于导入的文件即可,重启MySQL。


        5、接着第四条,进入MySQL,use sugarcrm,之后提示“Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A”,因为导入的数据很大,有2G多,这个库也很大,表也很多。在use 该库时,MySQL需要预读数据库信息,由于量大,于是出现提示,只需要在进入MySQL时,加上个-A参数即可,“mysql -uroot -ppassword -A”。


        6、如果本地或是服务器导入sql文件时,经常这两种错误,‘Lost connection to MySQL server during query’、‘Got a packet bigger than 'max_allowed_packet' bytes’,那么需要在配置文件中重新设置max_allowed_packet。


        7、select  ... into  outfile ...方式导出数据,只能在连接的MySQL服务器上导出,没有加路径,则为/var/lib/mysql/当前数据库文件目录,加了目录则在/tmp目录里,若是在其他服务器远程连接,则会报“ERROR 1 (HY000) at line 1: Can't create/write to file ”错误。


        8、MySQL 5.6 去掉严格模式

vim /etc/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
sql_mode=NO_ENGINE_SUBSTITUTION

        9、启动MySQL时报“Starting MySQL.. ERROR! The server quit without updating PID file (/www/mysql/data/FJR-bt-kvm-72-26.pid)”

/www/mysql/data/FJR-bt-kvm-72-26.pid没有权限

chmod 777 /www/mysql/data/FJR-bt-kvm-72-26.pid

#如果解决不了,可以移步看看这个 http://blog.rekfan.com/articles/186.html

        10、进入mysql库后,grant 操作报“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)”

update user set Create_tablespace_priv ='Y' where user = 'root';
flush privileges;

        11、删除原有主键,重新设置主键

1、取消主键
alter table `table_name` drop primary key;

2、添加a_id
alter table `table_name` add column `a_id` int(11) unsigned not null first; 

3、添加主键
ALTER  TABLE  `table_name` MODIFY COLUMN  `a_id` INT(11) NOT NULL AUTO_INCREMENT, add PRIMARY KEY (`a_id`);

         12、测试服务器登录有问题,查看错误日志,里面报 “Lock wait timeout exceeded; try restarting transaction ……” ,登上服务器,重启 MySQL,失败,于是手动结束进程,再启动,这时启动也失败了,进入错误日志,提示之前 MySQL 没有正常关闭。 清空错误日志,过了一会儿,再次启动,这会正常了,到头也没查出啥原因,只是清空错误日志再启动 MySQL 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值