サブクエリ limit †select * from road_times where id in ( select id from ( select id from road_times where road_id = 1 limit 10 ) as tmp ) ツール †
利用履歴 †
8.0 †
A temporary password is generated for [email protected]: A.rr9-,mUtyX
ALTER USER 'root'@'localhost' identified BY 'Txxxxxxx9999_'; Percona(5.7)移行 †install †yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm yum install Percona-Server-server-57.x86_64 pt-online-schema-change --ask-pass --alter="ADD TEST VARCHAR(100)" h=localhost,D=cakephp,t=words,u=root --dry-run pt-online-schema-change --ask-pass --alter="add column comment2 varchar(10) not null default 'fuga'" h=localhost,D=test,t=dummy,u=root --execute trouble †
オンラインDDL変更 †MySQL 5.6からオンラインDDL変更ができるようになったが、pt-online-schema-changeも健在 Percona Toolkitに同梱
概念 †
Top 50メモ †
便利な関数 †
便利なツール †
セキュリティのために †
binログからの復旧 †mysqlbinlog -uroot -p -D /var/lib/mysql/mysql-bin.000002 --start-datetime="2017-05-12 20:30:00" --stop-datetime="2017-05-12 20:40:00" > 2030.sql オペレーションミスで消すというアフォなことをしてしまった。たまたまレプリケーションしてたほうがdelete反映が遅れた(60分後でも平気)ので救われた。 文字コード †PostgreSQL等と違ってテーブルクリエート時に指定できないのだろうか?/etc/my.cnfをいちいち書き換えないと駄目なのか?
mysql> status
SHOW VARIABLES LIKE 'character\_set\_%';
create database codezine default charset utf8;
クライアント側の設定 †通常のmysqlで実行される文字コードは初期設定だとlatin1。これで文字化けしないわけがないので適宜文字コードを設定しておく。 mysql> status; mysql> set character set utf8; mysql.iniでの文字コードの設定 †デフォルトのcharsetを設定ファイルに記載しておくと手間が省ける [mysql] default-character-set=文字コード [mysqld] default-character-set=文字コード [client] default-character-set=文字コード 接続ログを出したい †
最大接続数・現在の接続数を確認したい †show global variables like '%connection%'; show status like 'Threads_connected'; ERROR 1040 (08004): Too many connectionsがでて繋げない場合はnetstatにて †netstat -anp | grep 3306 デフォルト接続設定 ~/.my.cnf †[client] host=localhost database=mysql user=root password=hogehoge 管理ツール †Windowsで出来るGUIツールを開発元が配布しているのが心強い。MySQL AdministratorやMySQL Query Browser等がある。 データベース作成、ユーザ作成などの主に管理系タスク †データベース †mysqlのコマンドラインから †文字コードを指定しないとlatin1になってしまう。
コマンドラインから †
ユーザ作成、権限付与 †ユーザの考え方が特殊でなれないとハマる。ユーザ名+アクセス元ホスト名分だけユーザが存在すると考えておいた方がよい。ワイルドカードで指定する事も出来るが、localhostとその他のホストは分けることが出来ない。自宅サーバなら殆どlocalhostのユーザだけで事足りるのだろうが、他の場所からアクセスさせるなら要注意。 コマンド集 †
テーブル構造やデータ型 †Tableの形式 †
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ) engine=InnoDB; データ型 †
順序型 †
順序に任意の値を設定 †alter table table_name auto_increment=12345; 注意点 †データベース名やテーブル名は大文字小文字を区別する。 †これはOSが大文字小文字区別するならば、DBとdbは別のデータベースとして取扱われる。テーブルに付いても同様である。WINDOWSのように区別しないOSの場合はその心配はない 総使用量 †select table_schema, sum(data_length+index_length) /1024 /1024/1024 as GB from information_schema.tables group by table_schema order by sum(data_length+index_length) desc; GUI管理ツール †phpMyAdmin †WEBからDB管理ができてしまうというツール。日本語化されていて、解凍即実行可能。海外ではよく使われているのかphpmyadminへの不正アクセスが多数・・・・ PHP 4,5.1では2.9系、PHP 5.2では3.x系を利用できる。 CentOS5では5.1.6なので2.xを使う。 その他MySQLのバージョン指定もかなり厳しくCentOSを使っているなら古いバージョンを使ったほうがよい。
トラブルシューティング †文字コード間違えてテーブル作ってしまった。 †ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; パスワードを忘れて再設定したい †起動引数に--skip-grant-tablesをつける。 centos4.8なら以下のようにする。 /usr/bin/mysqld_safe --skip-grant-tables mysql -u root mysql> use mysql mysql> UPDATE user SET Password=PASSWORD('') WHERE User='root'; mysql> flush privileges; FAQ †パスワード忘れた †
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root'; mysql> flush-privileges;
これでパスワード認証を求められる mysql -u root -p xoops /var/lib/mysql/mysql以下を全部消してinitする SQLファイル、Javaからの実行時のみ文字化け †mysqlコンソールからは大丈夫だが、ファイル実行させるとだめ、設定がほとんどlatin1になっていたのが原因。 MariaDB [(none)]> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
mysql> CHARSET utf8 Charset changed mysql> SHOW VARIABLES LIKE 'character\_set\_%';
Counter: 17247,
today: 3,
yesterday: 4
|