MySQLのコマンドを動かす | ローカル

ローカル環境でMySQLコマンドを使うにはXAMPP Controll Panelに付属するShellツールを使うとよい。

コントロールパネルに付属するShellを起動する


MySQLへのログイン→DB選択→SELECT文の実行までの流れ
	# mysql -u (ユーザー名) -p
	Enter password: (パスワード)
	MariaDB [(none)]> use animal_db
	Database changed
	MariaDB [animal_db]> select * from animals
	

ワンライナーでログインすることもできる

	# mysql -uユーザー名 -pパスワード
	
-uとユーザー名の間にスペースを空けないこと。-pも同様。


MySQLのコマンドを動かす | Git Bash |Git for windowsのBash | xampp

xamppのmysqlをGit Bashで使う方法。xamppはCドライブ直下に配置している場合。
	exec winpty bash
	export PATH=$PATH:/c/xampp/mysql/bin
	mysql -u root -p
	

方法2

Git Bashからmysqlコマンドを使うには環境変数の設定と「winpty」コマンドを使わねばならない。

環境変数の設定

  1. 環境変数の設定画面を開く。
  2. 上段項目であるユーザー環境変数からPathを選択して編集ボタンを押す。
  3. 新規ボタンを押し、mysql.exeが存在するディレクトリパスを入力してOKボタンを押す。
  4. 以上で環境変数の設定はおわり。
    すでにGitBashが立ち上がっているなら、一旦閉じて再度開く。


Git Bashからmysqlコマンドを使う

mysqlコマンドの前にwinptyを付け足す。
	$ winpty mysql -v
	

補足:
winptyはmysqlに限らずwindowsではよくお目にかかるコマンド。

シェルファイル(sh)に記述する場合、「winpty」は無くともよいようである。
ただし、Git Bashのルート以下にダンプファイル出力しなければならない。

ルートが「C:\Users\user」である場合、ダンプファイル出力場所の成否
C:\Users\user\Documents\rab
× C:rab


MySQLのコマンドを動かす | SHELL

test.sh

#!/bin/sh
echo 'テスト開始'
mysql -uユーザー名 -pパスワード -e "
	use animal_park;
	show tables;
	"
echo 'テスト完了'
cmd /k
	
SQL部分は「"」で囲む。

パスワードを対話式にする

パスワードを省略すると、シェル実行の際パスワードの入力が促される。

#!/bin/sh
mysql -uユーザー名 -p -e "
	use animal_park;
	show tables;
	"
cmd /k
	
出力
Enter password: ****
+-----------------------+
| Tables_in_animal_park |
+-----------------------+
| nekos                 |
| users                 |
| yagi_groups           |
| yagis                 |
+-----------------------+
Microsoft Windows [Version 10.0.17134.228]
(c) 2018 Microsoft Corporation. All rights reserved.

	

MySQLをコマンドで動かす | サーバー(さくらサーバー)

shellコマンドでさくらサーバー(スタンダードプラン)のDBにアクセスする。
Git for windowsのshellコマンドを検証を行った。

SSHでまずはサーバーにログインする。(パスワードでログインする場合)
	$ ssh -l (ユーザー名) (ユーザー名).sakura.ne.jp
	$ password:(パスワード)
	
続いてMySQLにログインする
	% mysql -h mysqlXXX.db.sakura.ne.jp -u (ユーザー名) -p
	% Enter password:(MySQLのパスワード)
	
対象のDBにアクセス
	% mysql> use (ユーザー名)_animal_db
	
SQLを実行
	% mysql> select * from animals
	

DBをバックアップ(エクスポート)する | mysqldump

ローカル環境のMySQLからanimal_parkデータベースをバックアップする。

	# mysqldump -u root -p animal_park > C:\rab\animal_park.sql
	Enter password: ****
	


パスワードを含めたワンライナーの記述方法(パスワードは「hoge」としたとき)
	# mysqldump -u root -phoge animal_park > C:\rab\animal_park.sql
「p」とパスワードの間にスペースを空けないこと。


DBをバックアップ、Windowsの場合 | mysqldump


cd C:\xampp\mysql\bin && mysqldump --default-character-set=utf8 -uroot sakerui_hanbai m_items > C:\tmp\m_items3.sql
※ xammpを通してMySQLを利用している場合

リモートでバックアップする(さくらサーバー・スタンダードプラン) | DBのエクスポート

	$ mysqldump --default-character-set=utf8 -h mysqlXXX.db.sakura.ne.jp -u 【ユーザー名】 -p 【ユーザー名】_animal_park > www/rab/sql_dump.sql
	Enter password: 【DBサーバーのパスワード】
	

リモートでバックアップする | SHELL

下記のシェル(test.sh)をFTPなどでサーバーにアップしてから実行する。
実行方法は「 ローカルからサーバー上のshファイルを実行する 」を参考。

test.sh

#!/bin/bash

mysqldump -Q -h mysql716.db.sakura.ne.jp -u ユーザー名 -pパスワード ユーザー名_animal_park > www/animal_park/backup/dump.sql 2> www/animal_park/backup/dump.error.txt

echo "出力完了"
	

注意

改行は「\r\n」でなく「\n」とすること。
「\r\n」だとdumpファイルが「cb_red_book.sql?」などと末尾に?がついてしまう。
このファイルはFTPでダウンロードしたり削除したりすることはできない。ターミナルから「rm」コマンドで消すしかない。


DBのリストア【ローカル】

「create database 〇〇〇〇」コマンドであらかじめDBを作成しておく

	# mysql -u root -p animal_park < C:\rab\animal_park.sql
	Enter password: ****
	

DBのリストア【リモート】

さくらサーバー(スタンダードプラン)、ターミナルはGit for windowsのGit bashで検証を行った。

最初にサーバーへログインする
	$ ssh -l 【ユーザー名】 【ユーザー名】.sakura.ne.jp
	Enter password:【パスワード】
	


sqlファイルをサーバーにアップする。アップはFTPでもよい。
アップ先のパスはどこでもよい。下記の例では「www/rab」にsqlファイルを配置している。

サーバー側にデータベースを作成する。例→【ユーザー名】_animal_park

リストアを実行する
	% mysql -h mysqXXX.db.sakura.ne.jp -u 【ユーザー名】 -p -B 【ユーザー名】_animal_park < www/rab/animal_park.sql
	Enter password:【DBのパスワード】
	

テーブルだけバックアップ

	$ mysqldump --default-character-set=utf8 -u root -p animals nekos > C:\rab\nekos.sql
	

データのみバックアップ
	$ mysqldump --default-character-set=utf8 -u root -p -t animals nekos > C:\rab\nekos.sql
	

テーブル名一覧を取得しテキストファイルに出力する


	mysql -uroot -pパスワード DB名 -N -e "show tables" > test.txt
	

test.txt
	kanis
	neko_groups
	nekos
	users
	wp_commentmeta
	wp_comments
	wp_duplicator_packages
	wp_links
	wp_options
	wp_postmeta
	wp_posts
	wp_term_relationships
	wp_term_taxonomy
	wp_termmeta
	wp_terms
	wp_usermeta
	wp_users
	yagis
	

wp_から始まるテーブル一覧をテキストファイルに出力する


	mysql -uroot -pパスワード DB名 -N -e "show tables like 'wp_%'" > test.txt
	
	wp_commentmeta
	wp_comments
	wp_duplicator_packages
	wp_links
	wp_options
	wp_postmeta
	wp_posts
	wp_term_relationships
	wp_term_taxonomy
	wp_termmeta
	wp_terms
	wp_usermeta
	wp_users
	

ファイル名に日付を含める


	date1=`date +"%Y%m%d"`
	mysql -uroot -pパスワード DB名 -N -e "show tables" > test$date1.txt
	
「test20181213.txt」が作成される。(2018-12-13現在の場合)


テキストファイルを読み込み変数にセット


	tbls_text=`cat test.txt`
	echo "$tbls_text"
	

echo 出力
	wp_commentmeta
	wp_comments
	wp_duplicator_packages
	wp_links
	wp_options
	wp_postmeta
	wp_posts
	wp_term_relationships
	wp_term_taxonomy
	wp_termmeta
	wp_terms
	wp_usermeta
	wp_users
	

改行を半角スペースに変換しながらテキストファイルを読み込む


	tbls_text=`cat wp_table_names.txt | tr  '\n\r' ' '`
	echo "$tbls_text"
	

echo 出力
	wp_commentmeta  wp_comments  wp_duplicator_packages  wp_links  wp_options  wp_postmeta  wp_posts  wp_term_relationships  wp_term_taxonomy  wp_termmeta  wp_terms  wp_usermeta  wp_users
	
Windowsなら改行コードを「\n\r」とする。あと半角スペースが2つになるようだ。
Linuxなら「\n」。


wp_から始まるテーブルだけエクスポートする


	echo "ローカルDBのパスワードを入力してください"
	read pw
	
	# wp_から始まるテーブル名一覧を取得し、テキストファイルに出力する。
	mysql -uroot -p$pw animal_park -N -e "show tables like 'wp_%'" > wp_table_names.txt
	
	# テキストファイルを読み込む。その際、改行はスペースに変換する。 改行コードはWindowsなら\n\r、Linuxなら\nに書き換えるように。
	tbls_text=`cat wp_table_names.txt | tr  '\n\r' ' '`
	echo "$tbls_text"
	
	echo 'SQLをエクスポートします。'
	mysqldump -uroot -p$pw animal_park $tbls_text --add-drop-table > wp_tbls.sql
	echo 'エクスポートしました。'