select * from road_times where id in ( select id from ( select id from road_times where road_id = 1 limit 10 ) as tmp )
2010-2015 | MySQL 5.1 |
2015-2019 | Mariadb 5.5(MySQL 5.5相当) |
2018-2019 | 仕事場でMariaDB 10.2.9 |
A temporary password is generated for root@localhost: A.rr9-,mUtyX
ALTER USER 'root'@'localhost' identified BY 'Txxxxxxx9999_';
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
MySQL 5.6からオンラインDDL変更ができるようになったが、pt-online-schema-changeも健在 Percona Toolkitに同梱
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;
show create database データベース名
通常のmysqlで実行される文字コードは初期設定だとlatin1。これで文字化けしないわけがないので適宜文字コードを設定しておく。
mysql> status; mysql> set character set utf8;
デフォルトのcharsetを設定ファイルに記載しておくと手間が省ける
[mysql] default-character-set=文字コード [mysqld] default-character-set=文字コード [client] default-character-set=文字コード
[mysqld] general_log=1 general_log_file="/var/log/mysql_general.log"
show global variables like '%connection%'; show status like 'Threads_connected';
netstat -anp | grep 3306
[client] host=localhost database=mysql user=root password=hogehoge
Windowsで出来るGUIツールを開発元が配布しているのが心強い。MySQL AdministratorやMySQL Query Browser等がある。
文字コードを指定しないとlatin1になってしまう。
DB作成 | mysql> create database wordpress default character set utf8; |
DB一覧 | mysqlshow |
DB作成 | mysqladmin -u root create TEST |
DB削除 | mysqladmin -u root drop TEST |
オートコミット確認。0以外はオートコミット | SELECT @@autocommit; |
オートコミット無効 | SET AUTOCOMMIT=0; |
ファイルの実行 | mysql -u root -phogehoge < sql.sql > out.txt |
mysqlクライアントから実行 | mysql>source sql.sql |
ユーザの考え方が特殊でなれないとハマる。ユーザ名+アクセス元ホスト名分だけユーザが存在すると考えておいた方がよい。ワイルドカードで指定する事も出来るが、localhostとその他のホストは分けることが出来ない。自宅サーバなら殆どlocalhostのユーザだけで事足りるのだろうが、他の場所からアクセスさせるなら要注意。
インポート | load data infile 'c:/ken_all.csv' into table テーブル名 |
エクスポート | select * from テーブル名 into outfile '絶対パスでファイル名' |
データベース毎の使用量 | select table_schema, sum(data_length+index_length) /1024 /1024 as MB from information_schema.tables group by table_schema order by sum(data_length+index_length) desc |
DB接続 | mysql -u root -p DB_NAME |
ユーザ作成 | mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to ユーザ名 identified by 'パスワード'; |
バッチ処理 | mysql -u root -p DB_NAME < sql.txt |
バッチ処理 on シェル | mysql> source ファイル名 |
操作ログをファイルも記録 | mysql> \t ログファイル名 |
TABLE一覧 | SHOW TABLES; |
プロセスの確認 | SHOW processlist |
DBダンプ | $ mysqldump -u root データベース名 > dump.sql |
列追加 | ALTER TABLE テーブル名 ADD フィールド名 varchar(200) not null [DEFAULT 0] [AFTER <カラム名>]; |
列削除 | ALTER TABLE テーブル名 DROP フィールド名 |
シーケンスを任意の値に | ALTER TABLE tbl AUTO_INCREMENT = 100; |
曜日取得(日曜1-土曜7) | SELECT DAYOFWEEK(now()); |
曜日取得(月曜0-日曜6) | SELECT WEEKDAY(now()); |
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;
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;
[mysqld] skip-grant-tables
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root'; mysql> flush-privileges;
しかしこれだと固まりやがる場合があり(超不安定DB) mysql> grant all on *.* to root@localhost identified by "パスワード";
これでパスワード認証を求められる mysql -u root -p xoops
/var/lib/mysql/mysql以下を全部消してinitする
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\_%';