Đây là một điều thú vị để xem xét: Sao lưu mysql
cơ sở dữ liệu giới hạn bạn rất nhiều ở chỗ bạn chỉ có thể khôi phục cơ sở dữ liệu đó vào cùng một phiên bản mysql mà bạn đã chạy bản sao lưu từ đó. Đây là lý do tại sao:
Đây là mysql.user từ MySQL 5.0.45
mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | | |
| x509_issuer | blob | NO | | | |
| x509_subject | blob | NO | | | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.01 sec)
Đây là mysql.user từ MySQL 5.1.32
mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)
Đây là mysql.user từ MySQL 5.5.12
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | | |
| authentication_string | text | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.01 sec)
Nếu bạn cố gắng khôi phục mysql.user thành phiên bản MySQL, điều đó không có nghĩa, nó sẽ tạo ra các vấn đề về quyền ngẫu nhiên. Cách để sao lưu các quyền của người dùng mysql theo cách không biết phiên bản là kết xuất các khoản trợ cấp của người dùng trong SQL. Bằng cách đó, các khoản tài trợ của người dùng là hoàn toàn di động. Có hai cách để thực hiện điều này:
TÙY CHỌN # 1: Sử dụng MAATKIT
mk-show-Grants sẽ tạo ra SQL cần thiết cho bất kỳ trường hợp mysql nào bạn kết nối. (Hãy nhớ rằng MAATKIT đang được di chuyển sang Bộ công cụ Percona. Công cụ này rất có thể sẽ được gọi là pt-show-Grants).
TÙY CHỌN # 2: Kịch bản bán phá giá SQL GRANTS
Tôi đã viết mô phỏng của riêng tôi về mk-show-Grants. Nó sẽ loại bỏ người dùng ẩn danh. Nó trông như thế này:
mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
Sử dụng một trong hai tùy chọn này sẽ tạo ra một bản sao lưu tài trợ người dùng ổn định hơn.
TRÊN MỘT LƯU Ý RIÊNG
Bây giờ nếu bạn đang sử dụng tùy chọn log-output này
[mysqld]
log-output=TABLE
cơ sở dữ liệu mysql sẽ điền vào nhật ký chậm (nếu được bật) dưới dạng bảng mysql trong lược đồ mysql chứ không phải là tệp văn bản. Vì vậy, thực hiện sao lưu vật lý sẽ bao gồm các bản ghi dựa trên bảng mysql như vậy. Tin tôi đi, nó không có giá trị cho không gian đĩa nếu nhật ký chung và nhật ký truy vấn chậm được kích hoạt và chồng chất trong lược đồ mysql. Chỉ cần gắn bó với các tùy chọn kết xuất tài trợ của MySQL.
CẬP NHẬT 2011-09-19 15:54 EDT
Có một yếu tố rất quan trọng trong việc duy trì sao lưu quyền của MySQL thông qua SQL Grants:
Mỗi người dùng đi ra với mật khẩu của họ ở một số định dạng MD5 được sửa đổi. Đối với mysql 4.0 trở lại, nó là một chuỗi thập lục phân 16 ký tự. Đối với mysql 4.1+, nó là 41 ký tự (Dấu hoa thị theo sau là chuỗi thập lục phân 40 ký tự).
Trước khi bạn khôi phục kết xuất SQL Grants, hãy kiểm tra tệp kết xuất SQL Grants để biết mật khẩu thập lục phân 16 ký tự. Nếu bạn nhìn thấy ngay cả một, bạn phải thêm đoạn sau vào /etc/my.cnf (hoặc my.ini cho Windows) trên máy chủ mysql mà bạn sẽ khôi phục lại:
[mysqld]
old_password=1
Lệnh old_password cho phép mật khẩu 16 char và 41 char cùng tồn tại và xác thực chính xác trong cùng một ví dụ mysql đang chạy. Bất kỳ mật khẩu nào được tạo trong tương lai sẽ có 16 ký tự.
Khởi động lại MySQL là không cần thiết. Chỉ cần chạy này:
SET GLOBAL old_password = 1;