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宕機起不來
#!/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登陸密碼便可。