mysql -u 报错_mysql错误集锦

1.使用myqldump备份出错:(--opt快速导出)

mysqldump -u root -p --database mysql --opt -h127.0.0.1 > mysql.sql

Enter password:

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

###因为mysqldump默认是不备份事件表的,只有加了--events 才会解决加上--events --ignore-table=mysql.events参数即可:

mysqldump  -u root -p  --database mysql --opt -h127.0.0.1 --events --ignore-table=mysql.events > mysql.sql

2.mysql登陆忘记密码 或者密码正确却登录不了

mysql -u root -p -h127.0.0.1  -P 42056(在mysql多实例的情况下,一定要加-P端口号的方式登录,否则即使密码再怎么对都无法登陆哟~!)

Enter password:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

###在my.cnf中加入参数skip-grant-tables

mysql即可进入修改密码。

mysql> update user set password=PASSWORD('123') where user='root';

mysql> flush privileges;

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123";

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

###授权的时候报错:执行flush privileges后再次授权就可以了。

3.基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限。下面是基本的步骤:

登录到mysql中,为root进行远程访问的授权,执行下面的命令:

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";

mysql> flush privileges;

"%"表示任何主机都可以远程登录到该服务器上访问。如果要限制只有某台机器可以访问,将其换成相应的IP即可,如:

GRANT ALL PRIVILEGES ON *.* TO root@"172.168.193.25" IDENTIFIED BY "root";

mysqldump: Couldn't execute 'SHOW FUNCTION STATUS WHERE Db = 's14_50hero'': Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted (1547)

错误原因:

是由于曾经升级过mysql,或用不同的MySQL版本进行备份迁移恢复。升级和迁移完后未使用mysql_upgrade升级数据结构造成的。

mysql.proc:

是MySQL的系统表,用来记录存储过程或函数的信息。使用desc mysql.proc 查看上面不同版本的MySQL的mysql.proc,果然出错的MySQL的mysql.proc只有16列。

解决办法:

使用命令:mysql_upgrade -udbaroot -pdbaroot20070508 -h127.0.0.1 --datadir=/usr/local/mysql/var --force (mysql_upgrade修复)

做好mysql AB复制后,master总报:

[Warning] Statement may not be safe to log in statement format.……

每更新一条数据就出现一次,导致日志太多,而且淹没了重要的日志。意思应该是statement 格式不安全。

statement format 应该是 binlog的一种格式,进入mysql查看一下

show global variables like 'binlog_format';

果然当前的格式为statement

需要把格式改为 mixed格式

修改slave的 my.cnf

在[mysqld]下面加入下面这行

binlog_format=mixed

4.mysql登录报错:

mysql -udbaroot -pdbaroot20170315 -h127.0.0.1 -P3306

mysql: relocation error: mysql: symbol strmov, version libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference

原来是以前的文件/usr/bin/mysql没替换的原因   安装源码包mysql时候一定要先卸载rpm包的mysql

用以下二条命令搞定了。

cd /usr/bin

mv mysql mysql.rpmbak

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

5.mysql宕机起不来

查看mysql日志:

170921 8:48:44 InnoDB: Database was not shut down normally!

InnoDB: Error: tried to read 16384 bytes at offset 0 43909120.

InnoDB: Fatal error: cannot read from file. OS error number 17.

判断是mysql非正常关闭导致innodb数据表损坏,因是SDB,解决方法是:备份原先的var目录,重新初始化,使用mysql_online_repair.sh在线重导 MDB数据库并修复了主从同步

#!/bin/sh

if (($# != 2));then

echo "Usage: sh mysql_online_repair.sh MDBIP DBSUFFIX"

exit 1

fi

. /etc/sysconfig/network-scripts/ifcfg-eth1

MDBIP=$1

HERODBSUF=$2

HEROUSER="dbauser"

HEROPWD="bUyfbxfVaCWaliQe"

ROOTPWD="dbaroot20070508"

[ ! -e "/etc/my.cnf" ] && exit

[ "$IPADDR" == "$(awk '/master-host/ {print $3}' /etc/my.cnf)" ] && exit

echo "mysqldump -h${MDBIP} -u${HEROUSER} -p${HEROPWD} -R --triggers --single-transaction --flush-logs --master-data --database ${HERODBSUF}_50hero ${HERODBSUF}_50hero_index ${HERODBSUF}_50hero_logs ${HERODBSUF}_50hero_ext0 > ${HERODBSUF}.sql"

mysqldump -h${MDBIP} -u${HEROUSER} -p${HEROPWD} -R --triggers --single-transaction --flush-logs --master-data --database ${HERODBSUF}_50hero ${HERODBSUF}_50hero_index ${HERODBSUF}_50hero_logs ${HERODBSUF}_50hero_ext0 > ${HERODBSUF}.sql

echo "mysql import ${HERODBSUF}.sql"

mysql -udbaroot -p${ROOTPWD} -h127.0.0.1 -e 'slave stop;'

mysql -udbaroot -p${ROOTPWD} -h127.0.0.1 < ${HERODBSUF}.sql

mysql -udbaroot -p${ROOTPWD} -h127.0.0.1 -e 'slave start;'

mysql -udbaroot -p${ROOTPWD} -h127.0.0.1 -e 'show slave status\G'

6.误删除数据库不要紧,binlog来帮你

首先分析什么时间出问题的,根据数据库丢失的时间处理binlog数据

直接本机导出,例如:导出 "2004-12-25 11:25:56"至"2004-12-25 11:25:56"的binlog数据:

mysqlbinlog --start-datetime="2004-12-25 11:25:56" --stop-datetime="2004-12-25 11:25:56" mysql-bin.000012 > 000012.sql

再把所有sql导入到数据库中

mysql -udbaroot -pdbaroot -h127.0.0.1 -f < 000012.sql

7.清除mysqlbinglog

#mysql -udbaroot -pdbaroot20070508 -h127.0.0.1 -e "purge binary logs to 'mysql-bin.000639';"

修改binlog过期自动清理(设为10天自动清理)

把binlog的过期时间设置为10天;

mysql -udbaroot -pdbaroot20070508 -h127.0.0.1 -e "set global expire_logs_days = 10;"

刷一下log使上面的设置生效,否则不生效。

mysql -udbaroot -pdbaroot20070508 -h127.0.0.1 -e "flush logs;"

为保证在MYSQL重启后仍然有效,在my.cnf中也加入此参数设置

expire_logs_days = 10

通过show global variables like '%expire_logs_days%';可以查看设置是否成功

mysql -udbaroot -pdbaroot20070508 -h127.0.0.1 -e "show global variables like '%expire_logs_days%';"

8.升级了mysql从5.0升级到5.1遇到的问题

(1)删除原先的mysql目录rm -rf

(2)安装5.1的rpm包

(3)mysql --version

mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

这是因为没有识别到ncurses-devel开发包导致的。ncurses包yum已经安装,运行某些程序时(如:fp)提示:

解决方法:找到/usr/lib/下的libncurses.so文件。

4ad2a881102cd1e4b1052d41f5ff18ba.png

ln -s libncurses.so.5.5 /usr/lib64/libtinfo.so.5   使用源文件做个软连接即可解决问题。

mysql --version

mysql Ver 14.14 Distrib 5.1.63, for unknown-linux-gnu (x86_64) using EditLine wrapper

8.Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/innobackupex line 23.

BEGIN failed--compilation aborted at /usr/bin/innobackupex line 23.

需要安装 yum install perl-Time-HiRes

9.配置了mysqld_multi启动mysql,但关闭时却关闭不了。查了一下,原来是如下原因:

在my.cnf中配置了密码:

52d457051c1bca56ec2d0cadb7770b31.png

如图改为正确的mysql登录密码即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值