#author("2020-11-12T05:06:46+00:00","default:src128","src128")
#author("2022-06-22T07:31:39+00:00","default:src128","src128")
&tag(MySQL/Tips);
*目次 [#odaf6ad2]
#contents
*関連ページ [#ycebb155]
*参考情報 [#la7f3b57]

*コマンドライン [#i94569a0]

**mysql [#f04b6060]

***プロトコルを指定 [#e61e4b64]
-ソケットじゃなくTCPを使って接続する
 mysql --protocol=TCP

**mysqld [#a3938af4]

***手動起動する [#m5f8dcad]
-MacPortsの場合。rootになってから実行すること。
 # /opt/local/lib/mysql8/bin/mysqld --user=_mysql 
-アップグレードプロセスをブロックしたい場合。「--upgrade=MINIMAL」を指定。
 # /opt/local/lib/mysql8/bin/mysqld --user=_mysql --upgrade=FORCE


*データベース全般 [#n1ed4231]

**InnoDBのインデックスの最大キー長 [#j3b3a2ac]
-[[第32回 InnoDBインデックスの最大キー長について:MySQL道普請便り|gihyo.jp … 技術評論社:http://gihyo.jp/dev/serial/01/mysql-road-construction-news/0032]]
-基本的に767バイト、innodb_large_prefixを有効にするなどして拡張すれば最大3072バイトまで拡張できる。
-ただしutf8では1文字3バイト、utf8mb4では1文字4バイトでとなる。
-MySQLのテーブル定義は文字数で指定するので、最大3072バイトまで拡張している場合でもutf8の場合「varchar(1024)」、utf8mb4の場合「varchar(768)」が限界となる。
-拡大していない場合は「varchar(255)」「varchar(191)」が限界となる。


**文字コードを確認する [#y0dfca6b]
-以下のコマンドを実行する
 show variables like '%char%';

**全データベースをバックアップしてリストアする [#n3253573]
-以下のコマンドでバックアップ。
 mysqldump --single-transaction --default-character-set=binary --quick -uroot -p --all-databases | bzip2 > database.sql.bz2
-以下のコマンドでリストア
 bzcat database.sql.bz2 | mysql
**全データベースを削除する [#y1715acd]
-[[Drop All Databases in MySQL | Mohinish's Blog:https://rootedlabs.wordpress.com/2009/10/03/drop-all-databases-in-mysql/]]によると以下のコマンドで削除できる
 mysql -uroot -p  -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| grep -v test | grep -v OLD |gawk '{print "drop database " $1 ";select sleep(0.1);"}' | mysql -uroot -ppassword
-もしくは削除するSQLを作成できる
 mysql -uroot -pxxxxx  -e "show databases" | grep -v Database | grep -v mysql | grep -v information_schema| grep -v test | grep -v OLD | gawk '{print "drop database " $1";select sleep(0.1);"}' > droppeddatabases.sql
-なお"grep -V"はinverse matchの意味。Databaseやmysqlは除外するという意味になる。またmysql  -eの出力は表形式だがリダイレクトすると罫線部分は除外される模様。上では除外されていないがperformance_schemaも除外したほうがいいかも?
 
mysql -uroot -pxxxxx  -e "show databases" | grep -v Database | grep -v mysql | grep -v information_schema| grep -v test | grep -v OLD | gawk '{print "drop database " $1";select sleep(0.1);"}' > droppeddatabases.sql
-さらにシンプルに
 mysql -e "show databases" | grep -Ev 'Database|^test$|mysql|_schema' | awk '{print "drop database "$1";"}' > dropdatabase.sql


**ibdataを削減する [#ieb687bb]
***参考情報 [#l7030c73]
-[[肥大化したibdata1を縮小する - Qiita:https://qiita.com/tukiyo3/items/028f4051078fdbd8edbd]]
-[[innodb - What is the best way to reduce the size of ibdata in mysql? - Database Administrators Stack Exchange:https://dba.stackexchange.com/questions/8982/what-is-the-best-way-to-reduce-the-size-of-ibdata-in-mysql]]

***手順(上記2番目のリンクに基づく) [#hf45f9c1]
-全てのデータベースをダンプする
 mysqldump --single-transaction --default-character-set=binary --quick -uroot -p --all-databases | bzip2 > database.sql
-mysql、performance_schema、information_schema以外の全てのデータベースをドロップ
-mysqlをシャットダウン
-my.cnfで以下を確認
 [mysqld]
 innodb_file_per_table = 1
-ibdata1、ib_logfile0、ib_logfile1を削除。
-mysqlを起動
-バックアップしたデータベース(SQL)をリストア。mysqlデータベース込みでリストアした場合ユーザーやパスワードも変わるので注意。


***疑問 [#n12ac8a2]
-ibdata1を削除したときユーザー名やパスワードは維持されるのか(mysqlのデータ)?

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS