mysqldumpはFILE権限が必要だしリモートだと使えなかったりするので、
mysqldumpのような動きをするスクリプトを作る。
カレントディレクトリに *.sql と *.txt を出力する
*.txt はヘッダ部分無しのTSV形式ファイルである
mysqlexport.sh
#!/bin/bash USERID=viewer PASSWD=ppaasssswwdd DBNAME=unko DBHOST=192.168.0.80 OPT="-u$USERID -p$PASSWD -h$DBHOST $DBNAME" # テーブル一覧取得 TABLELIST=$(mysql $OPT -Nse " SELECT table_name FROM information_schema.tables WHERE table_schema='$DBNAME' AND table_type = 'BASE TABLE' ") # スキーマとデータを取得 for TABLE in $TABLELIST; do echo "dump $TABLE" mysqldump $OPT --single-transaction --skip-lock-tables --no-data $TABLE > "$TABLE.sql" mysql $OPT --binary-mode --default-character-set=utf8 -NBe "SELECT * FROM $TABLE" > "$TABLE.txt" done
データ形式はmysqldumpのとだいたい同じなので、 mysqlimport で普通にインポートできる
NULLが「NULLというテキスト」になっちゃうけど、今どきは NULLを許さないのでセーフ
# スキーマの取り込み cat *.sql | mysql -uuser -ppass -h192.168.0.90 unko # データの取り込み mysqlimport -uuser -ppass -h192.168.0.90 -D -r --local /data/work/*.txt
mysqlimportでのファイル指定はフルパスじゃないとダメ