นี่คือสิ่งที่น่าสนใจที่ต้องพิจารณา: การสำรองmysql
ฐานข้อมูลจะ จำกัด คุณอย่างมากในการที่คุณสามารถกู้คืนฐานข้อมูลดังกล่าวเป็น mysql รุ่นเดียวกันที่คุณใช้ในการสำรองข้อมูล นี่คือเหตุผล:
นี่คือ mysql.user จาก 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)
นี่คือ mysql.user จาก 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)
นี่คือ mysql.user จาก 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)
หากคุณพยายามคืนค่า mysql.user ให้เป็นเวอร์ชันของ MySQL ที่ไม่ได้มีไว้ใช้ก็จะสร้างปัญหาการอนุญาตแบบสุ่ม วิธีการสำรองข้อมูลสิทธิ์ผู้ใช้ mysql ในแบบที่ไม่เชื่อเรื่องพระเจ้าคือการถ่ายโอนข้อมูลผู้ใช้ที่ให้สิทธิ์ใน SQL ด้วยวิธีนี้ผู้ใช้ถือเป็นพกพาอย่างสมบูรณ์ มีสองวิธีในการทำสิ่งนี้:
OPTION # 1: การใช้ MAATKIT
mk-show-grantsจะสร้าง SQL ที่ต้องการอินสแตนซ์ mysql ที่คุณเชื่อมต่อ (โปรดทราบว่า MAATKIT จะถูกย้ายไปยัง Percona Toolkit เครื่องมือนี้มักจะถูกเรียกว่า pt-show-grants)
OPTION # 2: สคริปต์การทิ้งของ SQL GRANTS
ฉันเขียนการจำลอง mk-show-grants ของฉันเอง มันจะออกจากผู้ใช้ที่ไม่ระบุชื่อ ดูเหมือนว่านี้:
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
การใช้ตัวเลือกใดตัวเลือกหนึ่งเหล่านี้จะสร้างการสำรองข้อมูลของผู้ใช้ที่มีเสถียรภาพ
บนหมายเหตุแยก
ตอนนี้ถ้าคุณใช้ตัวเลือกบันทึกเอาท์พุท
[mysqld]
log-output=TABLE
ฐานข้อมูล mysql จะเติมข้อมูลบันทึกช้า (ถ้าเปิดใช้งาน) เป็นตาราง mysql ใน schema mysql มากกว่าไฟล์ข้อความ ดังนั้นการสำรองข้อมูลจริงจะรวมถึงไฟล์บันทึกแบบตาราง mysql เชื่อฉันจะไม่คุ้มค่าพื้นที่ใช้งานหากบันทึกทั่วไปและบันทึกแบบสอบถามช้าเปิดใช้งานและซ้อนขึ้นใน schema mysql เพียงติดกับ MySQL Grants Dump Options
อัพเดท 2011-09-25 15:54 EDT
มีปัจจัยสำคัญอย่างหนึ่งในการบำรุงรักษาการสำรองข้อมูลสิทธิ์ MySQL ผ่าน SQL Grants:
ผู้ใช้แต่ละคนออกมาพร้อมรหัสผ่านในรูปแบบ MD5 ที่แก้ไขบางส่วน สำหรับ mysql 4.0 และย้อนกลับเป็นสตริงเลขฐานสิบหก 16 ตัว สำหรับ mysql 4.1+ จะเป็นอักขระ 41 ตัว (เครื่องหมายดอกจันตามด้วยสตริงเลขฐานสิบหก 40 อักขระ)
ก่อนที่คุณจะกู้คืนดัมพ์ของ SQL Grants ให้ตรวจสอบไฟล์ดัมพ์ของ SQL Grants สำหรับรหัสผ่านเลขฐานสิบหก 16 อักขระใด ๆ หากคุณเห็นแม้แต่รายการเดียวคุณต้องเพิ่มสิ่งต่อไปนี้ใน /etc/my.cnf (หรือ my.ini สำหรับ Windows) บนเซิร์ฟเวอร์ mysql ที่คุณจะกู้คืนไปที่:
[mysqld]
old_password=1
old_passwordสั่งอนุญาตให้ 16 ถ่านและถ่าน 41 รหัสผ่านที่จะอยู่ร่วมกันได้อย่างถูกต้องและรับรองความถูกต้องในกรณีที่ทำงาน MySQL เดียวกัน รหัสผ่านที่สร้างขึ้นไปข้างหน้าจะมีความยาว 16 ตัวอักษร
ไม่จำเป็นต้องทำการรีสตาร์ท MySQL เรียกใช้สิ่งนี้:
SET GLOBAL old_password = 1;