非常に信頼性の高いWordPressデータベースを取得するbashスクリプトがありますが、私のサイトの1つが以前のWordPressマルチサイトから来たため、データベースにDEFINERSが含まれているため、次のコードが正しく実行されません。
gunzip -c $destination_path_to_wordpress/folder/db-export.sql.gz | mysql -u $destination_db_user -p$destination_db_pass $destination_db_name
上記の結果はERROR 1227 (42000) at line 3224: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation
データベースを手動でエクスポートして実行し、sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i db-export.sql
データベースをインポートしようとすると、データベースを正常にインポートし、ユーザー名の変更を検索してライブサイトにすることができます。
質問:
定義者の問題を排除するために、現在のdb importコマンドとsedコマンドを組み合わせる正しい構文は何ですか?私が達成したいのは次のとおりです。
明らかに正確ではありませんが、ポイントはわかります...
gunzip -c $destination_path_to_wordpress/folder/db-export.sql.gz | `sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i db-export.sql | mysql -u $destination_db_user -p$destination_db_pass $destination_db_name
どのようなヒントがありますか?
ありがとう
ベストアンサー1
sed
この場合、ファイルから来るデータの代わりにファイルから来るデータを処理しようとします。gunzip
ファイル名を省略すると、幸せに読み込むことができます。標準入力(つまり、からgunip
)そして次のアドレスに書き込みます。標準出力(今すぐmysql
)。
読みやすいように3行に分けました。それでも次のように動作しますが、本当に必要な場合は、次の行を一緒にリンクできます。
gunzip -c "$destination_path_to_wordpress/folder/db-export.sql.gz" |
sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' |
mysql -u "$destination_db_user" -p"$destination_db_pass" "$destination_db_name"