事前確認事項

設定箇所

  • 頻繁に使用されるColumnに関してはindexを張る事
  • 一度の処理でselectが大量に発生していないか確認

確認方法

レプリケーション

コマンド逆引き

Index一覧を見る

show indexes from テーブル名;

外部キーを追加

alter table テーブル add foreign key (コラム名) references テーブル名(コラム名);

外部キーが張られている親テーブルを削除する時に以下を叩くと削除出来るようになる

SET FOREIGN_KEY_CHECKS=0;

行を削除

delete from テーブル名 where ....

Auto_incrementを変更する

ALTER TABLE テーブル名 AUTO_INCREMENT =0;

列を追加

alter table テーブル名 add 列名 データ型 first|after 列名

Foreign Keyを解除する

mysql> show create table 対象テーブル;
~略~
 CONSTRAINT `bx_flower_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `bx_user` (`id`)
~略~

こんな感じで出来るので、以下のように削除

mysql> alter table ch_cpn drop foreign key bx_flower_ibfk_1;

mysqldumpに必要な権限だけをアカウントに付与する

GRANT SELECT, LOCK TABLES ON dbname.* TO dump@'%' IDENTIFIED BY 'dump';
mysqldump --opt -udump -pdump -hlocalhost -B dbname --tables table_name

使い方としては別ホストからの接続dump@hoge-serverはgrant allにして、localからはmysqldumpしかさせない、というやり方。

データをdumpする

mysqldump --opt -c -uユーザ名 -p データベース名 [テーブル名] > 出力先ファイル名

DBがUTF-8じゃない時は文字化けする可能性があるので、こうする

mysqldump --opt -c -uユーザ名 -p --default-character-set=binary データベース名 [テーブル名] > 出力先ファイル名

rootのパスワードを忘れたとき

http://dev.mysql.com/doc/refman/4.1/ja/resetting-permissions.html

debian-sys-maintのパスワードが何かしらの理由で上書きされた時

GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' 
IDENTIFIED BY 'password from debian.cnf' WITH GRANT OPTION;

自分の権限を見る

mysql> SHOW GRANTS FOR 'root'@'localhost';

どんな権限がサポートされているか見る

mysql> SHOW PRIVILEGES\G

Slow logを確認する

/usr/sbin/mysqld, Version: 5.0.51a-24+lenny5-log ((Debian)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# Time: 110203  7:13:34 <==記録日時
# User@Host: hogeuser[hogeuser] @ web01.private [192.168.10.5] <== ユーザーIDとリクエストした端末
# Query_time: 5(実行時間)  Lock_time: 0(ロック時間)  Rows_sent: 4(送信行数)Rows_examined: 1516294(処理対象となった行数)
use bbs;
SELECT `be`.* FROM `web_bbs_entry` as `be` ORDER BY `be`.`created` DESC LIMIT 4;

日時などを見るときに

select * from blog where now() between in started_at and ended_at;

こんな事も出来る。以下と同じ事

select * from blog where started_at <= now() and ended_at >= now();

Tuning

http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html
http://dsas.blog.klab.org/archives/50860867.html

エラー時には

mysql "ERROR 1018 (HY000): Can’t read dir of ‘.’ (errno: 13)"

MySQLを再起動するといいらしい

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

そもそもMySQL起動してないかもしれない。プロセス確認する
もし起動しなかったら

mkdir /var/run/mysqld/
touch /var/run/mysqld/mysqld.sock
chown -R mysql /var/run/mysqld/
service mysql start

mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)

mysqldコマンドを実行したら

110928 14:13:10 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
110928 14:13:10 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110928 14:13:10  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

errno 13というのが出ているので、調べてみる

perror 13
OS error code  13:  Permission denied

権限エラーである事が分かる。

/var/lib/mysqlがmysqlユーザーで読み込み出来るかどうか調べてみる

ERROR 1025 (HY000): Error on rename of './myblog/#sql-133_52' to './myblog/post' (errno: 150)

上記エラーが出たら

mysql> SHOW INNODB STATUS \G

で確認

LATEST FOREIGN KEY ERROR 
------------------------
111115 14:48:56 Error in foreign key constraint of table  
myblog/post:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT NULL. Constraint:
,
 CONSTRAINT "post_id_refs_id_26260bef739cadd7" FOREIGN KEY ("blog_id") REFERENCES "blog" ("id")

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

ALTER TABLE yourtablename DROP FOREIGN KEY internally_generated_foreign_key_id

外部キーを破棄する場合は、SHOW CREATE TABLE を使って、内部で生成された外部キー ID を確認する必要があります。

mysql> SHOW CREATE TABLE ibtest11c\G
*************************** 1. row *************************** [#v159b585]
       Table: ibtest11c
Create Table: CREATE TABLE `ibtest11c` (
 `A` int(11) NOT NULL auto_increment,
 `D` int(11) NOT NULL default '0',
 `B` varchar(200) NOT NULL default '',
 `C` varchar(175) default NULL,
 PRIMARY KEY  (`A`,`D`,`B`),
 KEY `B` (`B`,`C`),
 KEY `C` (`C`),
 CONSTRAINT `0_38775` FOREIGN KEY (`A`, `D`)
REFERENCES `ibtest11a` (`A`, `D`)
ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `0_38776` FOREIGN KEY (`B`, `C`)
REFERENCES `ibtest11a` (`B`, `C`)

ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=INNODB CHARSET=latin1
1 row in set (0.01 sec)
mysql> ALTER TABLE ibtest11c DROP FOREIGN KEY `0_38775`;

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

set foreign_key_checks = 0;

ERROR! Manager of pid-file quit without updating file.

(hoge)user-no-MacBook-Air:bin aya$ sudo /opt/local/share/mysql5/mysql/mysql.server start
Starting MySQL
...... ERROR! Manager of pid-file quit without updating file.

上記のようなエラーが出たら/opt/local/varを確認し、(なければ&諸設定されてなければ)以下のフォルダーの作成、設定を行う

(hoge)user-no-MacBook-Air:var aya$ ls -la 
drwxr-xr-x   6 root    admin   204 11 10 12:23 . 
drwxr-xr-x  12 root    admin   408 11  7 12:59 ..
drwxr-xr-x   3 _mysql  _mysql  102 11  7 15:32 db <== mysqlのpermissionつける 
drwxr-xr-x   3 _mysql  _mysql  102 11 10 12:24 log <==新規追加する
drwxr-xr-x  11 root    admin   374 11  7 12:31 macports
drwxr-xr-x   3 _mysql  _mysql  102 11 10 12:20 run <==新規追加する

logとrunの配下にはmysql5のフォルダーを作成する

/opt/local/var/log/mysql5
/opt/local/var/run/mysql5

参考URL


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-12 (月) 16:54:26 (197d)