ある時 mysqlを再インストールするために yumでremoveした後に/usr/share/mysqlもdeleteした。(これがトラブルの元)
再度yumでインストールしたが起動しない。
/var/logにあるmysqld.logを見ると [ERROR] Can't find messagefile '/usr/share/mysql/english/errmsg.sys' とあった。
でもこのファイルは存在するgoogle先生に聞くとhttp://kowta.blogspot.jp/2012/06/vps1gmysqlcentos62.htmlに回答があった。
# yum reinstall mysql-libs
でmysql-libsを入れる。
再度
# service mysqld start
でも走らない。再度ログをチェック、今度は
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
となっている。google先生に聞く。
http://ukonlly.hatenablog.jp/entry/20110908/1315491518に回答が。mysqldをストップし、/etc/my.cnfを
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
default-storage-engine=InnoDB
innodb_buffer_pool_size=128M
innodb_log_file_size=16M
innodb_log_files_in_group=2
skip-grant-tables ←これを記入
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
に変更し、mysqldを起動
# service mysqld start
# su mysql ユーザーをmysqlにする
bash-4.1$ mysql_upgrade
bash-4.1$ exit
# service mysqld stop
で/etc/my.cnfにある、先ほど記入した skip-grant-tables をコメントアウトし、mysqld を起動する。
今度は
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 16777216 bytes!
とあった。今度はhttp://blog.enjoitech.com/article/196に回答があった.
mysqld を止めてから /var/lib/mysqlにある、ib_logfile0 と ib_logfile1 を消す(mysqlが自動で作る)その後 mysqld を起動する。
(私はmysqlのインストール後にログのサイズを変更したため、この操作が必要だった)
これで、 mysqld を起動するとやっと起動できた。
今日、mysqlにrootでログインしようとしたら、
Access denied for user 'root'@'localhost' (using password: NO)
とログイン出来ない。パスワードは間違いなく合っている。原因は不明
google先生に尋ねるとここに回答が有った
まずはmysqlを止める
# service mysqld stop
セーフモードのオプションを付けて起動
# mysqld_safe --skip-grant-tables &
mysqlにログイン
# mysql -u root ← セーフモードで--skip-grant-tablesを付けているのでパスワードなしで入れる
使用するデーターベースをmysqlにする
mysql> use mysql;
新しい(元の)パスワードを設定
mysql> update user set password=PASSWORD("XXXXXX") where User='root'; ← XXXXXXは設定したいパスワード
mysqlを抜ける
mysql> quit
mysqlに設定したパスワードで入れるかチェック
# service mysqld restart ← mysqlを再起動しているのでflush privileges;はやらなくてもよい
# mysql -u root -pXXXXXX ← XXXXXXは設定したパスワード -pとパスワードの間にスペースを入れてはいけない
mysql>
と帰ってくればOK、でmysqlを抜ける。
mysql> quit
そしてmysqlにパスワードなしで入れないことを確認しておく事
ある時、kvmで動いているメインのホストを再起動した時、二つあるサブホストの再起動がうまく出来なかった。私は全てのサブホストがシャットダウンしてからメインのホストの再起動に入る設定をしているが、デフォルトで設定してある(私は150秒)経って(多分強引に)OFFしていた見たい(普段は30秒くらい待って終わる)。メインのホストが立ち上がった後、サブホストの起動を見ているとソケットがどうのこうのというメッセージが表示され、mysqlの起動に失敗している。多分シャットダウンがうまくいかずソケットが残っていると思う。CentOSの場合はデフォルトの場所ではなく /var/lib/mysqlにmysql.sock があるので、これを削除してスタートすると、無事起動した。
$ mysqlcheck -h localhost -u root -p -a -o データーベース名
でチェックが出来る。
-h localhost は省略可能、 -u root は管理権限を持ったユーザ、-p はパスワードの要求、これは -pパスワードでも可、但し -p と パスワードの間にスペースを入れてはいけない、-a はanalyze つまり分析の依頼をする、-o はoptimize テーブルを最適化、データーバース名は -Aとすると全データーベースのチェックになる。