MariaDB&MySQL数据库的增删改查及备份和恢复
1、创建数据库
1 | $ sudo mysql -uroot //进入数据库 |
2、创建及删除表
1 | MariaDB [(none)]> use study_test; |
删除表命令:1
MariaDB [study_test]> DROP TABLE study_test;
3、修改表名
1 | ALTER TABLE study_test RENAME study_table; |
4、修改字段
(1)删除字段
1 | MariaDB [study_test]> ALTER TABLE study_table DROP submit_date; |
(2)添加字段
1 | MariaDB [study_test]> ALTER TABLE study_table ADD submit_time timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'; |
又比如给表files
新增创建时间
字段:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37-- 表内数据
MariaDB [development]> select * from files;
+----+--------------+------------------------+------+---------+-------+---------------------+
| id | filename | path | mark | scale | info | updateTime |
+----+--------------+------------------------+------+---------+-------+---------------------+
| 1 | 1-a.jpg | ./uploads/1-a.jpg | 1 | 800*600 | HGMM | 2022-11-03 13:35:53 |
| 2 | blue2red.jpg | ./uploads/blue2red.jpg | 0 | 400*300 | HGMM2 | 2022-11-03 15:01:58 |
+----+--------------+------------------------+------+---------+-------+---------------------+
2 rows in set (0.495 sec)
-- 查询表结构
MariaDB [development]> DESC files;
+------------+------------------+------+-----+---------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------+-------------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| filename | varchar(30) | YES | | NULL | |
| path | varchar(255) | YES | | NULL | |
| mark | tinyint(3) | YES | | NULL | |
| scale | varchar(255) | YES | | NULL | |
| info | varchar(255) | YES | | NULL | |
| updateTime | timestamp | YES | | current_timestamp() | on update current_timestamp() |
+------------+------------------+------+-----+---------------------+-------------------------------+
7 rows in set (0.186 sec)
-- 新增 createTime 字段
MariaDB [development]> ALTER TABLE files ADD creatTime timestamp NULL DEFAULT CURRENT_TIMESTAMP;
Query OK, 2 rows affected (0.510 sec)
Records: 2 Duplicates: 0 Warnings: 0
-- 表内新数据
MariaDB [development]> select * from files;
+----+--------------+------------------------+------+---------+-------+---------------------+---------------------+
| id | filename | path | mark | scale | info | updateTime | creatTime |
+----+--------------+------------------------+------+---------+-------+---------------------+---------------------+
| 1 | 1-a.jpg | ./uploads/1-a.jpg | 1 | 800*600 | HGMM | 2022-11-03 13:35:53 | 2022-11-05 13:24:58 |
| 2 | blue2red.jpg | ./uploads/blue2red.jpg | 0 | 400*300 | HGMM2 | 2022-11-03 15:01:58 | 2022-11-05 13:24:58 |
+----+--------------+------------------------+------+---------+-------+---------------------+---------------------+
2 rows in set (0.022 sec)
注意
注意更新时间字段和创建时间字段区别:1
2
3
4
5
6
7
8
9
10
11
12
13
14MariaDB [development]> DESC files;
+------------+------------------+------+-----+---------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------+-------------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| filename | varchar(30) | YES | | NULL | |
| path | varchar(255) | YES | | NULL | |
| mark | tinyint(3) | YES | | NULL | |
| scale | varchar(255) | YES | | NULL | |
| info | varchar(255) | YES | | NULL | |
| updateTime | timestamp | YES | | current_timestamp() | on update current_timestamp() |
| creatTime | timestamp | YES | | current_timestamp() | |
+------------+------------------+------+-----+---------------------+-------------------------------+
8 rows in set (0.152 sec)
(2)修改字段
①修改字段名
语法如下:1
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
比如改表study_table
的结构,将 test_discribe
字段名称改为 test_disc
,同时将数据类型变为CHAR(30)
:1
2
3
4
5
6
7
8
9
10
11
12MariaDB [study_test]> ALTER TABLE study_table CHANGE test_discribe test_disc CHAR(30);
+---------+-----------+---------------+-------------------+
| test_id | test_name | test_disc | submit_time |
+---------+-----------+---------------+-------------------+
| 1 | ONE | 第一条 | 2021-08-17 12:21:41 |
| 2 | TWO | 第二条 | 2021-08-17 12:21:41 |
| 3 | THREE | 第三条 | 2021-08-17 12:21:41 |
| 4 | FOUR | 第四条 | 2021-08-17 12:21:41 |
| 5 | FIVE | 第五条 | 2021-08-17 12:21:41 |
| 6 | SIX | 第六条 | 2021-08-17 12:21:41 |
+---------+-----------+---------------+-------------------+
6 rows in set (0.001 sec)
②修改字段数据类型
语法如下:1
2ALTER TABLE <表名> MODIFY <字段名> <数据类型>;
-- ALTER TABLE files MODIFY updateTime timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; 修改更新时间类型
比如修改表files
的结构,将 filename
字段数据类型称改为变为VARCHAR(30)
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34-- 原来数据结构
MariaDB [development]> DESC files;
+------------+------------------+------+-----+---------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------+-------------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| filename | varchar(255) | YES | | NULL | |
| path | varchar(255) | YES | | NULL | |
| mark | tinyint(3) | YES | | NULL | |
| scale | varchar(255) | YES | | NULL | |
| info | varchar(255) | YES | | NULL | |
| updateTime | timestamp | YES | | current_timestamp() | on update current_timestamp() |
+------------+------------------+------+-----+---------------------+-------------------------------+
7 rows in set (0.017 sec)
-- 变更数据类型
MariaDB [development]> ALTER TABLE files MODIFY filename VARCHAR(30);
Query OK, 1 row affected (0.235 sec)
Records: 1 Duplicates: 0 Warnings: 0
-- 变更后:
MariaDB [development]> DESC files;
+------------+------------------+------+-----+---------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------+-------------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| filename | varchar(30) | YES | | NULL | |
| path | varchar(255) | YES | | NULL | |
| mark | tinyint(3) | YES | | NULL | |
| scale | varchar(255) | YES | | NULL | |
| info | varchar(255) | YES | | NULL | |
| updateTime | timestamp | YES | | current_timestamp() | on update current_timestamp() |
+------------+------------------+------+-----+---------------------+-------------------------------+
7 rows in set (0.013 sec)
5、插入数据
(1)插入单条
1 | MariaDB [study_test]> INSERT INTO study_table (test_name, test_discribe) VALUES ("ONE", "第一条"); |
(2)插入多条
1 | MariaDB [study_test]> INSERT INTO study_table (test_name, test_discribe) VALUES ("TWO", "第二条"), ("THREE", "第三条"); |
6、修改数据
1 | MariaDB [study_test]> UPDATE study_table SET test_discribe="第三条" WHERE test_id=3; //删除“第三条”前面的 空格 |
7、删除数据
1 | MariaDB [study_test]> DELETE FROM study_table WHERE test_id=6; //删除第6条 |
8、查询数据
(1)一般查询
1 | MariaDB [study_test]> SELECT test_id, test_name FROM study_table WHERE test_discribe="第六条"; |
使用LOCATE(检索条件,字段)
查询(以下实例对应study_test
数据库下usr_score_table
表):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34# 表内数据如下:
MariaDB [study_test]> SELECT * FROM usr_score_table ORDER BY usr_id;
+--------+---------------------+---------+---------+
| usr_id | submit_time | y_score | s_score |
+--------+---------------------+---------+---------+
| 1 | 2021-11-17 11:06:43 | 68 | 66 |
| 1 | 2021-11-17 12:03:22 | 76 | 78 |
| 1 | 2021-11-17 12:03:22 | 72 | 71 |
| 2 | 2021-11-17 12:03:22 | 68 | 73 |
| 2 | 2021-11-17 11:06:43 | 86 | 88 |
| 3 | 2021-11-17 11:17:46 | 68 | 66 |
| 3 | 2021-11-17 12:03:22 | 77 | 80 |
| 4 | 2021-11-17 11:06:43 | 86 | 88 |
| 5 | 2021-11-17 11:17:46 | 68 | 66 |
| 5 | 2021-11-17 12:03:22 | 80 | 82 |
| 6 | 2021-11-17 11:06:43 | 86 | 88 |
| 6 | 2021-11-17 12:03:22 | 88 | 82 |
+--------+---------------------+---------+---------+
12 rows in set (0.372 sec)
MariaDB [study_test]> SELECT * FROM usr_score_table WHERE LOCATE('6',y_score) ORDER BY usr_id;
+--------+---------------------+---------+---------+
| usr_id | submit_time | y_score | s_score |
+--------+---------------------+---------+---------+
| 1 | 2021-11-17 11:06:43 | 68 | 66 |
| 1 | 2021-11-17 12:03:22 | 76 | 78 |
| 2 | 2021-11-17 11:06:43 | 86 | 88 |
| 2 | 2021-11-17 12:03:22 | 68 | 73 |
| 3 | 2021-11-17 11:17:46 | 68 | 66 |
| 4 | 2021-11-17 11:06:43 | 86 | 88 |
| 5 | 2021-11-17 11:17:46 | 68 | 66 |
| 6 | 2021-11-17 11:06:43 | 86 | 88 |
+--------+---------------------+---------+---------+
8 rows in set (0.001 sec)
使用INSTR(字段,检索条件)
查询:1
2
3
4
5
6
7
8
9
10
11
12
13
14MariaDB [study_test]> SELECT * FROM usr_score_table WHERE INSTR(y_score,'6') ORDER BY usr_id;
+--------+---------------------+---------+---------+
| usr_id | submit_time | y_score | s_score |
+--------+---------------------+---------+---------+
| 1 | 2021-11-17 11:06:43 | 68 | 66 |
| 1 | 2021-11-17 12:03:22 | 76 | 78 |
| 2 | 2021-11-17 11:06:43 | 86 | 88 |
| 2 | 2021-11-17 12:03:22 | 68 | 73 |
| 3 | 2021-11-17 11:17:46 | 68 | 66 |
| 4 | 2021-11-17 11:06:43 | 86 | 88 |
| 5 | 2021-11-17 11:17:46 | 68 | 66 |
| 6 | 2021-11-17 11:06:43 | 86 | 88 |
+--------+---------------------+---------+---------+
8 rows in set (0.008 sec)
此外还可以用POSITION(检索条件 IN 字段)
及REGEXP 检索条件
查询:1
2
3
4
5
6
7
8
9
10
11
12
13
14MariaDB [study_test]> SELECT * FROM usr_score_table WHERE y_score REGEXP '6' ORDER BY usr_id;
+--------+---------------------+---------+---------+
| usr_id | submit_time | y_score | s_score |
+--------+---------------------+---------+---------+
| 1 | 2021-11-17 11:06:43 | 68 | 66 |
| 1 | 2021-11-17 12:03:22 | 76 | 78 |
| 2 | 2021-11-17 11:06:43 | 86 | 88 |
| 2 | 2021-11-17 12:03:22 | 68 | 73 |
| 3 | 2021-11-17 11:17:46 | 68 | 66 |
| 4 | 2021-11-17 11:06:43 | 86 | 88 |
| 5 | 2021-11-17 11:17:46 | 68 | 66 |
| 6 | 2021-11-17 11:06:43 | 86 | 88 |
+--------+---------------------+---------+---------+
8 rows in set (0.136 sec)
(2)通配符%
查询
%
表示任何字符出现任意次数;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31MariaDB [study_test]> SELECT * FROM study_table WHERE test_name LIKE 'F%';
+---------+-----------+---------------+---------------------+
| test_id | test_name | test_discribe | submit_time |
+---------+-----------+---------------+---------------------+
| 4 | FOUR | 第四条 | 2021-08-17 12:21:41 |
| 5 | FIVE | 第五条 | 2021-08-17 12:21:41 |
+---------+-----------+---------------+---------------------+
2 rows in set (0.000 sec)
MariaDB [study_test]> SELECT * FROM study_table WHERE test_name LIKE 'T%';
+---------+-----------+---------------+---------------------+
| test_id | test_name | test_discribe | submit_time |
+---------+-----------+---------------+---------------------+
| 2 | TWO | 第二条 | 2021-08-17 12:21:41 |
| 3 | THREE | 第三条 | 2021-08-17 12:21:41 |
+---------+-----------+---------------+---------------------+
2 rows in set (0.001 sec)
MariaDB [study_test]> SELECT * FROM study_table WHERE test_discribe LIKE '%条%';
+---------+-----------+---------------+---------------------+
| test_id | test_name | test_discribe | submit_time |
+---------+-----------+---------------+---------------------+
| 1 | ONE | 第一条 | 2021-08-17 12:21:41 |
| 2 | TWO | 第二条 | 2021-08-17 12:21:41 |
| 3 | THREE | 第三条 | 2021-08-17 12:21:41 |
| 4 | FOUR | 第四条 | 2021-08-17 12:21:41 |
| 5 | FIVE | 第五条 | 2021-08-17 12:21:41 |
| 6 | SIX | 第六条 | 2021-08-17 12:34:07 |
+---------+-----------+---------------+---------------------+
6 rows in set (0.000 sec)
其中对int
字段的可以先进行转换为CHAR
再查询(以下实例对应study_test数据库下usr_score_table
表),如:1
2
3
4
5
6
7
8
9
10MariaDB [study_test]> SELECT * FROM usr_score_table WHERE CAST(y_score AS CHAR) LIKE '6%' ORDER BY usr_id;
+--------+---------------------+---------+---------+
| usr_id | submit_time | y_score | s_score |
+--------+---------------------+---------+---------+
| 1 | 2021-11-17 11:06:43 | 68 | 66 |
| 2 | 2021-11-17 12:03:22 | 68 | 73 |
| 3 | 2021-11-17 11:17:46 | 68 | 66 |
| 5 | 2021-11-17 11:17:46 | 68 | 66 |
+--------+---------------------+---------+---------+
4 rows in set (0.000 sec)
(3)通配符_
查询
_
只匹配单个字符1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18MariaDB [study_test]> SELECT * FROM study_table WHERE test_name LIKE 'T__';
+---------+-----------+---------------+---------------------+
| test_id | test_name | test_discribe | submit_time |
+---------+-----------+---------------+---------------------+
| 2 | TWO | 第二条 | 2021-08-17 12:21:41 |
+---------+-----------+---------------+---------------------+
1 row in set (0.000 sec)
MariaDB [study_test]> SELECT * FROM study_table WHERE test_name LIKE 'T___';
Empty set (0.000 sec)
MariaDB [study_test]> SELECT * FROM study_table WHERE test_name LIKE 'T____';
+---------+-----------+---------------+---------------------+
| test_id | test_name | test_discribe | submit_time |
+---------+-----------+---------------+---------------------+
| 3 | THREE | 第三条 | 2021-08-17 12:21:41 |
+---------+-----------+---------------+---------------------+
1 row in set (0.001 sec)
9、备份与恢复数据库;
(1)利用mysqldump
备份与恢复命令:
①在Linux
下备份和恢复
1 | $ sudo mysqldump -uroot -p wpDB > ~/mysql-wpDB.dump //备份数据库名及保存路径 |
还可以创建定时备份和定量删除脚本
1、创建backup.sh
脚本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
username=user # 数据库用户名
password=pass # 数据库用户密码
database=dbname # 要备份的数据库名称
backup_dir=~/backups/ # 配置备份文件路径
date=$(date +"%Y-%m-%d") # 设置备份文件的日期格式
max_backups=30 # 设置要保存的时间长度
# 利用mysqldump操作备份
mysqldump -u $username -p$password $database > "$backup_dir$database-$date.sql"
# 删除过期的备份
cd $backup_dir
find . -type f -name "*.sql" -mtime +$max_backups -exec rm {} \;
# -mmin n 对文件数据的最近一次修改是在 n 分钟之前。
# -mtime n 对文件数据的最近一次修改是在 n*24 小时之前。
若要备份多个数据库,参考脚本语句如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24DB_USER="root" # 定义数据库用户名和密码
DB_PASS="your_password" # 定义数据库密码
DB_NAMES=("db1" "db2" "db3") # 定义要备份的数据库名
BACKUP_TIME=$(date +"%Y-%m-%d_%H-%M-%S") # 设置备份文件的日期格式
BACKUP_PATH="/backup/mariadb" # 配置备份文件路径
BACKUP_FILE="mariadb_$BACKUP_TIME.tar.gz"
max_backups=30 # 设置要保存的时间长度
# 判断备份文件夹是否存在,不存在就创建
if [ ! -d "$BACKUP_PATH" ];
then
mkdir - p $BACKUP_PATH
fi
# 开始备份数据库
for db in "${DB_NAMES[@]}";
do
# 导出数据库
mysqldump -u $DB_USER -p$DB_PASS $db > "$BACKUP_PATH/$db.sql"
# 将数据库文件打包压缩
tar -rvf "$BACKUP_PATH/$BACKUP_FILE" "$BACKUP_PATH/$db.sql"
# 删除导出的数据库文件
rm -f "$BACKUP_PATH/$db.sql"
done
删除30天前的备份文件
find $BACKUP_PATH -mtime +$max_backups -name "*.tar.gz" -exec rm {} \;
2、然后,使用chmod
命令给该脚本添加执行权限:1
chmod +x backup.sh
3、最后,使用cron
来设置定时任务来定期执行该脚本。
例如,要每天凌晨 1
点执行该脚本,并记录操作日志,可以在 crontab
文件中添加以下内容:1
crontab -e
然后在最后添加如下内容:1
0 1 * * * /path/to/backup.sh >> ~/backups/backup.log 2>&1 &
此外还可以执行开机运行脚本执行备份操作,具体如下:
创建/home/用户名/.config/autostart/start_backup.desktop
文件,输入以下内容:1
2
3
4
5
6
7
8
9
10
11
12[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=start_backup
Comment=数据库开机备份
Exec=/home/用户名/文档/backups/start_backup.sh # 用户名及脚本路径根据实际情况填写
OnlyShowIn=XFCE;
RunHook=0
StartupNotify=false
Terminal=false
Hidden=false
②windows10
下备份
运行cmd
模式
输入命令:1
2mysqldump -u root -P3307 -p wpDBtest > E:\数据备份\Linux\mysql-wpDB.dump
yourpassword:******
其中-P3307
如果没改数据库端口可不输入。
运行Powershell
模式
输入命令:1
mysqldump -uroot -P3307 -p yourpassword --default-character-set=gbk wpDBtest > E:\数据备份\Linux\mysql-wpDB.dump
其中--default-character-set=gbk
解决备份后中文数据可能会出现的乱码,默认utf8
。
③windows10
下恢复
运行cmd
管理员模式
输入命令:1
mysql -u root -P3307 -p yourpassword --default-character-set=utf8 wpDBtest < E:\数据备份\Linux\mysql-wpDB.dump
运行Powershell
管理员模式
输入命令:1
Get-Content E:\数据备份\Linux\mysql-wpDB.dump | .\mysql -uroot -P3307 -p yourpassword --default-character-set=utf8 wpDBtest
问题:Powershell
下命令出现错误如下:ERROR at line 224: Unknown command '\''.
提示此错误--default-character-set=utf8
也无法解决
④在Windows
<==>Linux
互相备份恢复时可能遇到的编码问题解决:
1> 可尝试用iconv -c -f UTF-8 -t UTF-16LE win10-study_db_UTF8.dump > win10-study_db_UTF-16LE.dump
进行转码【此命令为UTF-8
到UTF-16LE
】
2> Debian系统可用iconv -f UTF-16LE -t UTF-8 win10-study_db_UTF-16LE.dump > win10-study_db_UTF8.dump
进行转码
3> ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci'
错误解决:
• 把文件中的所有的utf8mb4_0900_ai_ci
替换为utf8_general_ci
。
• 以及utf8mb4
替换为utf8
。
⑤注意事项
上诉备份方案存在一定的弊端如:用户正在执行数据操作时,数据则会丢失等情况。
解决方案:在备份是给库表加上锁,保证数据的完整性。--lock-all-tables
:请求锁定所有表
实例:mysqldump --databases wpDBtest --lock-all-tables >/tmp/testdb.sql
--single-transaction:单事务,能够对innodb存储引擎做热备
--events:备份事件调度器代码
--routines:备份存储过程和存储函数
--triggers:备份触发器
备份时请求锁之后滚动日志:--flush-logs
复制时同步位置标记:--master-data=[0|1|2]
注意:恢复时需关闭二进制文件,恢复成功后则开启
关闭二进制日志:set session sql_log_bin=0
开启二进制日志:set session sql_log_bin=1
(2)锁表备份步骤:
1)锁表并且给只读权限flush tables with read lock;
2)滚动日志flush logs;
3)查看二进制日志信息show master status;
4)使用mysqldump
进行数据备份mysqldump --databases wpDBtest >/tmp/wpDBtest.sql
5)备份完成之后则需解锁unlock tables;
命令行备份实例如下:1
2
3
4
5
6
7
8
9mysqldump -p --databases wpDBtest --lock-all-tables --flush-logs >/tmp/testdb2.sql
mysqldump -p --databases wpDBtest --single-trasaction --flush-logs >/tmp/testdb3.sql
mysqldump -p --databases wpDBtest --lock-all-tables --flush-logs --master-data=2 >/tmp/testdb4.sql
```
## (3)查看恢复的数据
```bash
$ sudo mysql -uroot //进入数据库`
$ use wpDBtest; //选择查看数据库`
MariaDB [wpDBtest]> select * from wp_options where option_name in("siteurl","home"); # 查看恢复信息
(4)用二进制日志恢复命令:
1》修改my.cnf
配置文件,开启binlog
$ sudo vim /etc/alternatives/my.cnf
//添加如下内容,开启binlog
1
2
3
4
5
6
7[mysqld]
log_bin=mysql-bin
binlog_format=ROW
expire_logs_days=7 #7天滚动
max_binlog_size=100M #每个日志最大100M
binlog_cache_size=4M
max_binlog_cache_size=256M #binlog最大缓存
添加完后重启。
2》查看log_bin
是否开启
MariaDB [(none)]> show variables like 'log_bin';
查看二进制log$ sudo mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001;
--no-defaults
避免出现字符问题错误
默认二进制文件存于/var/lib/mysql/
下,文件名为一系列mysql-bin.00000*
。
3》测试过程
1、创建测试数据库并新增表和记录1
2
3
4
5
6MariaDB [wpDBtest]> create database testDB;
MariaDB [testDB]> create table testtable (id int null, name varchar(255) null);
MariaDB [(none)]> source ~/wpDBtest-re.sql
MariaDB [testDB]> insert into testtable values(1,"xiaoming");
MariaDB [testDB]> insert into testtable values(2,"wang");
MariaDB [testDB]> insert into testtable values(3,"王");
2、删除一条测试数据1
2
3MariaDB [testDB]> delete from testtable where id =2;`
##MariaDB [testDB]> delete from testtable;
##Query OK, 5 rows affected (0.027 sec)
查询删除后的结果:1
2
3
4
5
6
7
8MariaDB [testDB]> select * from testtable;
+------+----------+
| id | name |
+------+----------+
| 1 | xiaoming |
| 3 | 王 |
+------+----------+
2 rows in set (0.001 sec)
3、导出二进制log
为sql
,--database=testDB
指定导出数据库testDB
的数据$ sudo mysqlbinlog --no-defaults --database=testDB /var/lib/mysql/mysql-bin.000001>~/testDB.sql;
4、进入~/
文件夹,复制原数据并另存testDB-re.sql
$ cp testDB.sql testDB-re.sql
$ sudo vim testDB-re.sql
//打开sql
文件,删除其中“delete from testtable where id =2
”语句
5、进入mariadb
,恢复数据1
2
3
4
5
6
7
8
9
10
11
12MariaDB [testDB]> source ~/testDB-re.sql
MariaDB [testDB]> select * from testtable;
+------+----------+
| id | name |
+------+----------+
| 1 | xiaoming |
| 3 | 王 |
| 1 | xiaoming |
| 2 | wang |
| 3 | 王 |
+------+----------+
5 rows in set (0.001 sec)
mysqldump
其他常用命令
①备份多个数据库结构和数据(--databases
或者-B
)
$ mysqldump -uyk -p --databases study_test study_db > /media/yk/文档1/Backup/Debian11_study_db_study_test_UTF8.dump
②备份所有数据库结构(-d
)
$ mysqldump -uyk -p -A-d > /media/yk/文档1/Backup/Debian11_db.dump
③备份所有数据库数据(-t
)
$ mysqldump -uyk -p -A-t > /media/yk/文档1/Backup/Debian11_db.dump
恢复XXX.dump
见9、备份与恢复数据库
④备份某库中某表,并导出为xml
格式( --xml(或-X)
库名 表名
)
$ mysqldump -uyk -p --xml study_test usr_table > /media/yk/文档1/Backup/Debian11_study_test_usr_table.xml
⑤还原单个数据库(需指定数据库)
1 | mysql>use mydb |
或者:1
$ mysql -uroot -p123456 mydb < f:\mydb.sql
⑥还原单个数据库的多个表(需指定数据库)
1 | mysql>use mydb |
或者:1
$ mysql -uroot -p123456 mydb<f:\multables.sql
参考资料:mariadb二进制日志和备份恢复