Bạn có thể lấy tên bảng mà bạn muốn từ mysql, sau đó sử dụng chúng để xây dựng các tham số kết xuất mysql của bạn.
Trong ví dụ dưới đây, chỉ cần thay thế "someprefix" bằng tiền tố của bạn (ví dụ: "tests_").
Các SHOW TABLES
truy vấn có thể được thay đổi để tìm bộ khác của bảng. Hoặc bạn có thể sử dụng truy vấn đối với INFORMATION_SCHEMA
bảng để sử dụng nhiều tiêu chí hơn nữa.
#/bin/bash
#this could be improved but it works
read -p "Mysql username and password" user pass
#specify your database, e.g. "mydb"
DB="mydb"
SQL_STRING='SHOW TABLES LIKE "someprefix%";'
DBS=$(echo $SQL_STRING | mysql -u $user -p$pass -Bs --database=$DB )
#next two lines untested, but intended to add a second excluded table prefix
#ANOTHER_SQL_STRING='SHOW TABLES LIKE "otherprefix%";'
#DBS="$DBS""\n"$(echo $ANOTHER_SQL_STRING | mysql -u $user -p$pass -Bs --database=$DB )
#-B is for batch - tab-separated columns, newlines between rows
#-s is for silent - produce less output
#both result in escaping special characters
#but the following might not work if you have special characters in your table names
IFS=$'\n' read -r -a TABLES <<< $DBS
IGNORE="--ignore_table="$DB"."
IGNORE_TABLES=""
for table in $TABLES; do
IGNORE_TABLES=$IGNORE_TABLES" --ignore_table="$DB"."$table
done
#Now you have a string in $IGNORE_TABLES like this: "--ignore_table=someprefix1 --ignore_table=someprefix2 ..."
mysqldump $DB --routines -u $user -p$pass $IGNORE_TABLES > specialdump.sql
Điều này được xây dựng với sự trợ giúp từ câu trả lời này về việc nhận "tất cả các bảng loại trừ trong bash": https://stackoverflow.com/a/9232076/631764
và câu trả lời này về việc bỏ qua các bảng với một số bash được sử dụng: https://stackoverflow.com/a/425172/631764