目次

MySQL

操作

起動/停止

起動

cd /usr/local/mysql; sudo ./bin/safe_mysqld –user=mysql &

停止

sudo mysqladmin shutdown

安全な起動/停止

mysqld_safe –relay-log=/var/lib/mysql/mysql-relay-bin –relay-log-index=/var/lib/mysql/mysql-relay-bin -O max_connect_errors=1000 &

mysqladmin shutdown -u root -p

シェルスクリプト

export PATH=/usr/bin:/bin:/usr/local/mysql/bin 
case $1 in 
  start) 
    cd /usr/local/mysql; ./bin/safe_mysqld --user=mysql & 
    ;; 
  stop) 
    mysqladmin shutdown 
    ;; 
  *) 
    echo "usage `basename $0` (start|stop)" 
    ;; 
esac 

mysqlコマンド

mysql -u root -p

\q

mysql -u <user> -p<password> <database> -e “<SQL>“

  ※-p とパスワードの間にスペースを入れない。 
* 接続状況を表示\\ 
  status; 

データベース

show databases;

create database <データベース名>;

use <データベース名>;

テーブル

show tables;

desc <テーブル名>;

show table status from <データベース名>;

ユーザと権限

SELECT host,user FROM mysql.user;

GRANTALL PRIVILEGES ON <データベース名>.* TO <ユーザ名> IDENTIFIED BY '<パスワード>';

SHOW GRANTS FOR <user>;

SET PASSWORD FOR <user>@'<host>' = password('<new password>');

DELETE FROM mysql.user WHERE user='<ユーザ名>';

  DELETE FROM mysql.user WHERE user='<ユーザ名>' and host='<ホスト名>';\\ 
  * 合わせて権限も削除\\ 
    REVOKE ALL PRIVILEGES ON * . * FROM <ユーザ名>;\\ 
    REVOKE ALL PRIVILEGES ON * . * FROM <ユーザ名>@'<ホスト名>';\\ 
* 権限の再読み込み\\ 
  FLUSH PRIVILEGES; 

ストレージエンジン

SHOW TABLE STATUS FROM <データベース名>;

SHOW CREATE TABLE <テーブル名>;

ALTER TABLE <テーブル名> ENGINE=<エンジン名>;

CREATE TABLE <テーブル名> … ENGINE=<エンジン名>;

SHOW ENGINES;

vi /etc/mysql/my.cnf

  <code> 

[mysqld]
default-storage-engine=INNODB
</code>

show engine innodb status\G

エンコーディング関連

SHOW CREATE DATABASE <データベース名>;

alter database <データベース名> default character set utf8;

/etc/mysql/my.cnf を編集。

  <code> 

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
character-set-server=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8
</code>

SHOW variables LIKE '%char%';

状態

show global variables;

show session variables;

レプリケーション

show slave status;

show variables where variable_name='binlog_format';

レプリケーションフォーマットについて

MySQL 5.1.8 より、第 3 のオプションが利用可能になりました。ミックス ベース レプリケーション (MBR) です。MBR では、デフォルトでステートメント ベース レプリケーションが行われますが、自動的に行ベース レプリケーションに切り替わります。次のケースがそれに該当します。項5.1.2.2. 「ミックス レプリケーション フォーマット」 も参照してください。

MIXED モードで実行している場合、次の条件下にあるレプリケーションはステートメント ベースから行ベースに自動的に切り替わります。

MySQL 5.1.12 から、ミックス ベース レプリケーション (MBR) がデフォルト フォーマットで、指定のない限り、すべてのレプリケーション環境に対応します。

http://dev.mysql.com/doc/refman/5.1/ja/replication-formats.html より

設定

log=/var/log/mysqld-query.log

  1. touch /var/log/mysqld-query.log
  2. chown mysql.mysql /var/log/mysqld-query.log
  3. chmod 640 /var/log/mysqld-query.log
  4. /sbin/service mysqld restart

スキーマ作成

create database <データベース名> CHARACTER SET utf8;

grant all on <データベース名>.* to <ユーザ>@<接続許可ホスト> identified by '<パスワード>';

(例)

  <code> 

grant all on mydb.* to userfoo@localhost identified by 'password';
</code>

  ※データベース名を * にすると、すべてのデータベースに対する権限が与えられます。\\ 
  ※@ の後に続くホスト名に "%" を指定すると、すべてのホストから接続することができます。\\ 
  (% をダブルクォートで囲む必要があります。)\\ 
  192.168.1.0/24 からだけ接続できるようにする場合は "192.168.1.%" と指定します。\\ 
* テーブル作成\\ 
  create table <テーブル名> (id integer); 
* テーブル作成(DBエンジン指定あり)\\ 
  create table <テーブル名> (id integer) type=InnoDB; 
* テーブル作成(PK と DBエンジンを指定)\\ 
  create table <テーブル名> (id integer, name varchar(16) constraint PK_XXX primary key (id)) type=InnoDB;     
* DBエンジンを後から指定\\ 
  alter table <テーブル名> type=InnoDB; 
* ユニークインデックス作成\\ 
  create unique index <インデックス名> on <テーブル名> (id1, id2); 
* 重複インデックス作成\\ 
  create index <インデックス名> on <テーブル名> (id1, id2); 
* カラム定義を変更\\ 
 alter table <テーブル名> change <変更前カラム名> <変更後カラム定義>;\\ 
 (例) 
 <code>alter table account change name name varchar(32) not null;</code> 

管理

バックアップ

mysqldump -u user -p password -x –all-databases | gzip > / tmp/mysql.dump.gz

mysql -u root -p password < dumpdata

   または\\ 
   gzip -dc / tmp/mysql.dump.gz | mysql -u root -p password 
* スナップショット\\ 
  mysqlsnapshot -u user -p password -s /tmp --split -n 
* ホットコピー\\ 
  mysqlhotcopy -u user -p password <データベース名> /tmp