mysql錯誤集錦

1.使用myqldump備份出錯:(--opt快速導出)mysql

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.linux

  ###由於mysqldump默認是不備份事件表的,只有加了--events 纔會解決加上--events --ignore-table=mysql.events參數便可:sql

 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便可進入修改密碼。app

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

mysql> flush privileges;this

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文件。

 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中配置了密碼:

如圖改成正確的mysql登陸密碼便可。

相關文章
相關標籤/搜索