Trước tiên, tôi có thể cung cấp cho bạn câu trả lời cho một bảng:
Sự cố với tất cả những INTO OUTFILE
này hoặc --tab=tmpfile
(và -T/path/to/directory
) câu trả lời là nó yêu cầu chạy mysqldump trên cùng một máy chủ là máy chủ MySQL và có các quyền truy cập đó.
Giải pháp của tôi chỉ đơn giản là sử dụng mysql
( không mysqldump
) với -B
tham số, nội dòng câu lệnh SELECT với -e
, sau đó xoa bóp đầu ra ASCII với sed
và kết thúc với CSV bao gồm hàng trường tiêu đề:
Ví dụ:
mysql -B -u username -p password database -h dbhost -e "SELECT * FROM accounts;" \
| sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"
"id", "đăng nhập", "mật khẩu", "thư mục", "email" "8", "mariana", "xxxxxxxxxx", "mariana", "" "3", "thiết kế bình phương", "xxxxxxxxxxxxxxxxx", " thiết kế bình phương "," [email protected] "" 4 "," miedziak "," xxxxxxxxxx "," miedziak "," example @ sqldat .com "" 5 "," Sarko "," xxxxxxxxx "," Sarko "," "" 6 "," LogitransPoland "," xxxxxxxxxxxxxx "," LogitransPoland "," "7", "Amos", "xxxxxxxxxxxxxxxxxxxx", " Amos "," "" 9 "," Annabelle "," xxxxxxxxxxxxxxxx "," Annabelle "," "" 11 "," Brandfathers andSons "," xxxxxxxxxxxxxxxxx "," BrandfathersAndSons "," "" 12 "," ImagineGroup ", "xxxxxxxxxxxxxxxx", "ImagineGroup", "" "13", "EduSquare.pl", "xxxxxxxxxxxxxxxxx", "EduSquare.pl", "" "101", "tmp", "xxxxxxxxxxxxxxxxxxxxx", "_", "
Thêm > outfile.csv
ở cuối lớp lót đó, để lấy tệp CSV của bạn cho bảng đó.
Tiếp theo, nhận danh sách tất cả bảng của bạn với
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
Từ đó, chỉ còn một bước nữa để tạo một vòng lặp, chẳng hạn như trong Bash shell để lặp qua các bảng đó:
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Giữa do
và ; done
chèn lệnh dài mà tôi đã viết trong Phần 1 ở trên, nhưng thay thế tên bảng của bạn bằng $tb
thay vào đó.