Một tập lệnh như thế này sẽ sử dụng máy khách mysql cli để in ra một loạt các câu lệnh cấp mà bạn sẽ cần sử dụng để tạo lại tài khoản người dùng. Lệnh này sẽ hoạt động tốt nhất nếu bạn có thông tin cơ sở dữ liệu được lưu trữ trong bạn .my.cnf
#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql
) | while read user host
do
echo "# $user @ $host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done
Nếu bạn đang chuyển từ một phiên bản mysql sang phiên bản khác, bạn có thể muốn sử dụng phiên bản này thay vì chỉ đơn giản là kết xuất cơ sở dữ liệu mysql. Lược đồ của cơ sở dữ liệu mysql đôi khi được cập nhật.
Điều này cũng sẽ cho phép bạn chọn và chọn các tài khoản bạn muốn tạo lại, nếu có một số hành trình bạn muốn loại bỏ.
Gần đây tôi đã sử dụng điều này trên một người dùng bao gồm khoảng trắng trong tên, điều này gây nhầm lẫn read
, vì IFS theo mặc định bao gồm ký tự khoảng trắng dưới dạng dấu phân cách. Lệnh mới và được cải tiến của tôi, dường như hoạt động tốt hơn trên các hệ thống tên người dùng kỳ lạ.
IFS=$'\t'; while read user host; do
echo "user:$user host:$host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")