MySQL數據庫備份與搶救性恢復
文章目錄
備份和恢復
[1]爲什麼要備份
- 災難恢復:硬件故障、軟件故障、自然災害、黑客攻擊、誤操作測試等數據丟失場景
[2]備份注意要點
- 能容忍最多丟失多少數據
- 恢復數據需要在多長時間內完成
- 需要恢復哪些數據
- 一定要做還原測試,用於測試備份的可用性, 還原演練
[3]備份時需要考慮的因素
- 溫備的持鎖多久
- 備份產生的負載
- 備份過程的時長
- 恢復過程的時長
[4]備份什麼
- 數據
- 二進制日誌、InnoDB的事務日誌
- 程序代碼(存儲過程、函數、觸發器、事件調度器)
- 服務器的配置文件
備份類型
[1]按不同類型分:
- 冷備:讀寫操作均不可進行,數據庫停止狀態
- 溫備:讀操作可執行;但寫操作不可執行
- 熱備:讀寫操作均可執行,數據庫運行狀態
- MyISAM:溫備,不支持熱備
- InnoDB:都支持
[2]按備份的內容來分:
- 完全備份:整個數據集
- 部分備份:只備份數據子集,如部分庫或表
- 增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據,備份較快,還原複雜
- 差異備份:僅備份最近一次完全備份以來變化的數據,備份較慢,還原簡單
- 注意:二進制日誌文件不應該與數據文件放在同一磁盤
[3]按備份後的內容來分:
- 物理備份:直接複製數據文件進行備份,與存儲引擎有關,佔用較多的空間,速度快
- 邏輯備份:從數據庫中“導出”數據另存而進行的備份,與存儲引擎無關,佔用空間少,速度慢,可能丟失精度
備份工具
cp, tar等複製歸檔工具:物理備份工具,適用所有存儲引擎;只支持冷備;完全和部分備份
LVM的快照:先加鎖,做快照後解鎖,幾乎熱備;藉助文件系統工具進行備份
mysqldump:邏輯備份工具,適用所有存儲引擎,溫備;支持完全或部分備份;對InnoDB存儲引擎支持熱備,結合binlog的增量備份
xtrabackup:由Percona提供支持對InnoDB做熱備(物理備份)的工具,支持完全備份、增量備份
MariaDB Backup: 從MariaDB 10.1.26開始集成,基於Percona XtraBackup 2.3.8實現
mysqlbackup:熱備份, MySQL Enterprise Edition組件
mysqlhotcopy:幾乎冷備,僅適用於MyISAM存儲引擎,使用LOCK TABLES、FLUSH TABLES和cp或scp來快速備份數據庫
基於LVM的備份
[1]請求鎖定所有表
mysql> FLUSH TABLES WITH READ LOCK; #全局讀鎖
[2]記錄二進制日誌文件及事件位置
mysql> FLUSH LOGS; #刷新日誌,生成新的日誌
mysql> SHOW MASTER STATUS; #查看當前二進制日誌文件
mysql -e ‘SHOW MASTER STATUS’ > /PATH/TO/SOMEFILE #存放至指定目錄
[3]創建快照
lvcreate -L # -s -p r -n NAME /DEV/VG_NAME/LV_NAME
[4]釋放鎖
mysql> UNLOCK TABLES;
[5]掛載快照卷,執行數據備份
[6]備份完成後,刪除快照卷
[7]制定好策略,通過原卷備份二進制日誌
邏輯備份工具:mysqldump, mydumper, phpMyAdmin
Schema和數據存儲在一起、巨大的SQL語句、單個巨大的備份文件
mysqldump工具
mysqldump參考文檔: 點擊我跳轉
mysqldump命令格式
mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] –B DB1 [DB2 DB3...]
mysqldump [OPTIONS] –A [OPTIONS]
mysqldump常見通用選項
mysqldump的MyISAM存儲引擎相關的備份選項
MyISAM不支持事務,只能支持溫備;不支持熱備,所以必須先鎖定要備份的庫,而後啓動備份操作。
-x,--lock-all-tables
#加全局讀鎖,鎖定所有庫的所有表,同時加--single-transaction或--lock-tables選項會關閉此選項功能
#注意:數據量大時,可能會導致長時間無法併發訪問數據庫
------------------------------------------------------------------------------------
-l,--lock-tables
#對於需要備份的每個數據庫,在啓動備份之前分別鎖定其所有表,默認爲on,
--skip-lock-tables選項可禁用,對備份MyISAM的多個庫,可能會造成數據不一致
#注:以上選項對InnoDB表一樣生效,實現溫備,但不推薦使用
mysqldump的InnoDB存儲引擎相關的備份選項
InnoDB 存儲引擎支持事務,可以利用事務的相應的隔離級別,實現熱備,也可以實現溫備但不建議用
--single-transaction
#此選項Innodb中推薦使用,不適用MyISAM,此選項會開始備份前,先執行START TRANSACTION指令開啓
事務
#此選項通過在單個事務中轉儲所有表來創建一致的快照。
僅適用於存儲在支持多版本控制的存儲引擎中的表(目前只有InnoDB可以); 轉儲不保證與其他存儲引擎保持一致。
在進行單事務轉儲時,要確保有效的轉儲文件(正確的表內容和二進制日誌位置),沒有其他連接應該使用以下語句:ALTER TABLE,DROPTABLE,RENAME TABLE,TRUNCATE TABLE,
#此選項和--lock-tables(此選項隱含提交掛起的事務)選項是相互排斥。
#備份大型表時,建議將--single-transaction選項和--quick結合一起使用。
生產環境實戰備份策略
InnoDB建議備份策略
mysqldump –uroot –A –F –E –R --single-transaction --master-data=1 --flushprivileges
--triggers --default-character-set=utf8 --hex-blob
>${BACKUP}/fullbak_${BACKUP_TIME}.sql
MyISAM建議備份策略
mysqldump –uroot –A –F –E –R –x --master-data=1 --flush-privileges --triggers
--default-character-set=utf8 --hex-blob >${BACKUP}/fullbak_${BACKUP_TIME}.sql
show master logs; #查看二進制日誌列表
show binlog enents[in 指定的二進制文件]; #查看某一個二進制日誌文件詳細列表
show master status; #查看當前系統正在使用的二進制日誌文件
flush logs; #刷新二進制日誌文件,生成新的二進制日誌文件
reset master [to num]; #清空所有的二進制文件,重新生成新的二進制文件指定文件標號
mysqlbinlog /var/lib/mysql/mariadb-bin.00000num #以可讀方式查看二進制文件
mysql_secure_installation #安全加固
重點實驗
這是關於二進制基礎操作隨記,與下列實驗關係不大,可參考可跳過 |
---|
show master logs; #查看二進制日誌列表
show binlog enents[in 指定的二進制文件]; #查看某一個二進制日誌文件詳細列表
show master status; #查看當前系統正在使用的二進制日誌文件
flush logs; #刷新二進制日誌文件,生成新的二進制日誌文件
reset master [to num]; #清空所有的二進制文件,重新生成新的二進制文件指定文件標號
mysqlbinlog /var/lib/mysql/mariadb-bin.00000num #以可讀方式查看二進制文件
mysql_secure_installation #安全加固
1.實現完全備份和還原
實驗準備
centos7:192.168.26.17 - |
|-關防火牆、關selinux、時間同步 ✅
centos7:192.168.26.47 - |
#基於方便識別:
我都統一用hostnamectl set-hostname XXX(你想設置的主機名)改了主機名
yum -y install mariadb-server #安裝數據庫服務 ✅
systemctl start mariadb.service #開啓數據庫服務 ✅
show master logs; #查看當前系統正在使用的二進制日誌文件 ✅
-----------------------------------------
注意:
開啓二進制文日誌需要修改配置文件
1.vim /etc/my.cnf.d/server.cnf
2.編輯配置文件在[mysqld]下加入log-bin ✅
剩下手動開啓or關閉的話都是在數據庫中操作的
1.set sql_log_bin=off; (關閉) ✅
2.set sql_log_bin=on; (開啓) ✅
實驗開始
server-17 |
---|
#開啓二進制日誌
[root@server-17 ~]# vim /etc/my.cnf.d/server.cnf
#編輯文件添加log-bin以開啓二進制日誌文件
[mysqld]
log-bin
#這是我們提前導入的hellodb庫
MariaDB [mysql]> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hellodb |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
#查看二進制日誌列表
MariaDB [(none)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 245 |
+--------------------+-----------+
1 row in set (0.00 sec)
----------------------------------------------
#我們先創建文件存放目錄
#熱備整庫壓縮至指定目錄,並添加時間戳重命名
[root@server-17 ~]# mkdir /data/backup;mysqldump -uroot -p -A -F --single-transaction --master-data=2 | gzip > /data/backup/all-`date +%F`.sql.gz
Enter password: #輸入你的數據庫密碼即可
#查看我們生成的備份文件
[root@server-17 ~]# ll /data/backup/
total 140
-rw-r--r-- 1 root root 140835 Nov 27 20:53 all-2019-11-27.sql.gz
server-47 |
---|
#在新機上安裝通版本數據庫
[root@server-47 ~]# yum -y install mariadb-server
#開啓mariadb.service服務
[root@server-47 ~]# systemctl start mariadb.service
#在新機上創建接受壓縮文件目錄
#將源主機備份的壓縮包文件拷至本機指定目錄
[root@server-47 ~]# mkdir /data/backup;scp [email protected]:/data/backup/all-2019-11-27.sql.gz /data/backup/
The authenticity of host '192.168.26.17 (192.168.26.17)' can't be established.
ECDSA key fingerprint is SHA256:xSXdC1BVgcAq9ArJQnRXjD2XBMYnnhFFCca3GMXMC14.
ECDSA key fingerprint is MD5:6d:c6:e4:70:74:91:e7:73:af:4f:10:d1:42:a9:82:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.26.17' (ECDSA) to the list of known hosts.
[email protected]'s password:
all-20 100% 138KB 17.0MB/s 00:00
#查看備份文件是否考至新機
[root@server-47 ~]# ls /data/backup/
all-2019-11-27.sql.gz
#解壓縮拷至新機的備份文件,並刪除原壓縮包
[root@server-47 ~]# gzip -d /data/backup/all-2019-11-27.sql.gz
#查看解壓縮得到的備份庫
[root@server-47 ~]# ls /data/backup/
all-2019-11-27.sql
#查看新機數據庫文件
MariaDB [(none)]> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
#因爲導入備份庫會生成大量垃圾二進制日誌,所以臨時關閉二進制日誌
MariaDB [(none)]> SET SQL_LOG_BIN=OFF;
Query OK, 0 rows affected (0.00 sec)
#source我們解壓縮的備份庫,從而導入
MariaDB [(none)]> source /data/backup/all-2019-11-27.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
此處省略恢復數據信息
#查看新機庫文件,已導入hellodb庫文件
MariaDB [mysql]> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hellodb |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
#查看新機二進制日誌列表
MariaDB [(none)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 245 |
+--------------------+-----------+
2 rows in set (0.00 sec)
#手動開啓二進制日誌
MariaDB [mysql]> SET SQL_LOG_BIN=ON;
Query OK, 0 rows affected (0.00 sec)
2.mysqldump 和二進制日誌結合實現增量備份
實驗開始
這個實驗可在前一個完全備份實驗的基礎上進行🧐
我這邊就偷懶,直接在上個實驗基礎上做的🤪
所以直接第一個實驗的實驗準備就好了
server-17 |
---|
#use進入hellodb庫
MariaDB [(none)]> USE hellodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
#在teachers表中插入新行姓名爲sun,年齡爲20的信息
MariaDB [hellodb]> INSERT teachers (name,age) VALUES ('sun',20);
Query OK, 1 row affected (0.01 sec)
#查看teachers表得到相關信息
MariaDB [hellodb]> SELECT * FROM teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | sun | 20 | NULL |
+-----+---------------+-----+--------+
5 rows in set (0.00 sec)
#查看二進制日誌列表,可看到二進制日誌增加
MariaDB [hellodb]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 290 |
| mariadb-bin.000002 | 481 |
+--------------------+-----------+
2 rows in set (0.00 sec)
#拷貝源數據庫的01二進制日誌文件到指定目錄,待處理
[root@server-17 ~]# cp /var/lib/mysql/mariadb-bin.000001 /data/backup/
#拷貝源數據庫的02二進制日誌文件到指定目錄,待處理
[root@server-17 ~]# cp /var/lib/mysql/mariadb-bin.000002 /data/backup/
#導出01二進制日誌文件中起始位置245(請參考完全備份)以後的數據,存放新生成的文件inc.sql中
[root@server-17 ~]# mysqlbinlog --start-position=245 /data/backup/mariadb-bin.000001 > /data/backup/inc.sql
#將二進制日誌中所有數據追加到指定文件inc.sql文件中
[root@server-17 ~]# mysqlbinlog /data/backup/mariadb-bin.000002 >> /data/backup/inc.sql
server-47 |
---|
#在新機上將源機上生成的二進制備份文件inc.sql拷至新機指定的目錄下
[root@server-47 ~]# scp [email protected]:/data/backup/inc.sql /data/backup/
root@192.168.26.17's password:
inc.sq 100% 2828 2.5MB/s 00:00
#因爲導入備份庫會生成大量垃圾二進制日誌,所以臨時關閉二進制日誌
MariaDB [(none)]> SET SQL_LOG_BIN=OFF;
Query OK, 0 rows affected (0.00 sec)
#source我們拷至新機的備份二進制日誌inc.sql
MariaDB [mysql]> source /data/backup/inc.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
此處省去恢復數據信息
#查看hellodb庫下的teachers表內容,顯示新增了sun的用戶信息
MariaDB [hellodb]> SELECT * FROM hellodb.teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | sun | 20 | NULL |
+-----+---------------+-----+--------+
#手動開啓二進制日誌
MariaDB [mysql]> SET SQL_LOG_BIN=ON;
Query OK, 0 rows affected (0.00 sec)
3.誤刪除了的某個重要數據表,進行搶救性還原
實驗準備
centos7:192.168.26.17 -關防火牆、關selinux、時間同步 ✅
#基於方便識別:
我都統一用hostnamectl set-hostname XXX(你想設置的主機名)改了主機名
yum -y install mariadb-server #安裝數據庫服務 ✅
systemctl start mariad.service #開啓數據庫服務 ✅
show master logs; #查看當前系統正在使用的二進制日誌文件 ✅
-----------------------------------------
注意:
開啓二進制文日誌需要修改配置文件
1.vim /etc/my.cnf.d/server.cnf
2.編輯配置文件在[mysqld]下加入log-bin ✅
剩下手動開啓or關閉的話都是在數據庫中操作的
1.set sql_log_bin=off; (關閉) ✅
2.set sql_log_bin=on; (開啓) ✅
實驗開始
server-17 |
---|
MariaDB [(none)]> USE hellodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [hellodb]>
MariaDB [hellodb]> SELECT * FROM hellodb.teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | sun | 20 | NULL |
+-----+---------------+-----+--------+
5 rows in set (0.00 sec)
MariaDB [hellodb]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 290 |
| mariadb-bin.000002 | 481 |
+--------------------+-----------+
2 rows in set (0.00 sec)
---------------------------------------
#將我們源數據庫的實驗環境清理一下
[root@server-17 ~]# rm -rf /data/backup/*
#我們先將源數據完全備份保存至指定目錄
[root@server-17 ~]# mysqldump -uroot -p -A -F --single-transaction --master-data=2 > /data/backup/allbackup_`date +%F_%T`.sql
Enter password: #輸入你的數據庫密碼即可
#查看我們生成的備份文件
[root@server-17 ~]# ll /data/backup/
total 512
-rw-r--r-- 1 root root 520891 Nov 28 09:57 allbackup_2019-11-28_09:57:37.sql
#現在我們模擬在完全備份後數據庫正常運行,用戶插入數據
MariaDB [hellodb]> INSERT hellodb.students (name,age) VALUES ('bokebi',18);
Query OK, 1 row affected (0.00 sec)
MariaDB [hellodb]> INSERT hellodb.students (name,age) VALUES ('laowang',25);
Query OK, 1 row affected (0.00 sec)
#10:05我們某位小白誤刪除了hellodb庫下的一張表students
MariaDB [hellodb]> DROP TABLE hellodb.students;
Query OK, 0 rows affected (0.00 sec)
#查看hellodb庫可得,students表已被刪除
MariaDB [hellodb]> SHOW TABLES;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| teachers |
| toc |
+-------------------+
6 rows in set (0.00 sec)
#在我們不知道的情況下,其他用在繼續寫入數據
MariaDB [hellodb]> INSERT teachers (name,age,gender) VALUES ('zhangsan',21,'M');
Query OK, 1 row affected (0.00 sec)
MariaDB [hellodb]> INSERT teachers (name,age,gender) VALUES ('lisi',22,'M');
Query OK, 1 row affected (0.00 sec)
MariaDB [hellodb]> INSERT teachers (name,age,gender) VALUES ('wangwu',23,'M');
Query OK, 1 row affected (0.00 sec)
#查看hellodb庫下的teachers表
#可以看出在誤刪表操作後其他用戶又插入了其他數據
MariaDB [hellodb]> SELECT * FROM hellodb.teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | sun | 20 | NULL |
| 6 | zhangsan | 21 | M |
| 7 | lisi | 22 | M |
| 8 | wangwu | 23 | M |
+-----+---------------+-----+--------+
8 rows in set (0.00 sec)
#10:20我們接到老闆的通知,發現重要表被刪除,進行恢復
#首先創建全局鎖禁止其他用戶再寫入數據
#發佈通告,通知用戶數據庫正在維護當中
MariaDB [hellodb]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
#想起了我們之前的完全備份,趕緊查看一下
#查看截止最後一次備份的時候二進制日誌的節點數
[root@server-17 ~]# grep '\-\- CHANGE MASTER TO' /data/backup/allbackup_2019-11-28_09\:57\:37.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000004', MASTER_LOG_POS=245;
#備份最後完全備份的時候二進制日誌截止節點數之後的數據到指定文件中
[root@server-17 ~]# mysqlbinlog --start-position=245 /var/lib/mysql/mariadb-bin.000004 > /data/backup/inc.sql
#邊備份的二進制日誌文件,找到誤刪除的語句,從二進制日誌備份文件中刪除此語句,如下圖
[root@server-17 ~]# vim /data/backup/inc.sql
#臨時關閉二進制日誌,以避免導致大量恢復時的垃圾二進制日誌
MariaDB [hellodb]> SET SQL_LOG_BIN=OFF;
Query OK, 0 rows affected (0.00 sec)
#source我們之前備份的完整備份
MariaDB [mysql]> source /data/backup/allbackup_2019-11-28_09:57:37.sql
#source我們之後備份的以及編輯去掉刪除操作的二進制日誌文件
MariaDB [hellodb]> source /data/backup/inc.sql
#查看hellodb庫中的表文件,發現被刪除的students表已恢復
MariaDB [hellodb]> SHOW TABLES;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
7 rows in set (0.00 sec)
#查看恢復的students表中,在刪除前其他用戶插入的數據
MariaDB [hellodb]> SELECT * FROM students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 3 | Xie Yanke | 53 | M | 2 | 16 |
| 4 | Ding Dian | 32 | M | 4 | 4 |
| 5 | Yu Yutong | 26 | M | 3 | 1 |
| 6 | Shi Qing | 46 | M | 5 | NULL |
| 7 | Xi Ren | 19 | F | 3 | NULL |
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 10 | Yue Lingshan | 19 | F | 3 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 12 | Wen Qingqing | 19 | F | 1 | NULL |
| 13 | Tian Boguang | 33 | M | 2 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 15 | Duan Yu | 19 | M | 4 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 19 | Xue Baochai | 18 | F | 6 | NULL |
| 20 | Diao Chan | 19 | F | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
| 24 | Xu Xian | 27 | M | NULL | NULL |
| 25 | Sun Dasheng | 100 | M | NULL | NULL |
| 26 | bokebi | 18 | F | NULL | NULL |
| 27 | laowang | 25 | F | NULL | NULL |
+-------+---------------+-----+--------+---------+-----------+
27 rows in set (0.00 sec)
#查看teachers表中在students表被刪除後其他用戶插入的數據
MariaDB [hellodb]> SELECT * FROM teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | sun | 20 | NULL |
| 6 | zhangsan | 21 | M |
| 7 | lisi | 22 | M |
| 8 | wangwu | 23 | M |
+-----+---------------+-----+--------+
8 rows in set (0.00 sec)