杭州明开seo/seoer是什么意思
Top
NSD DBA DAY06
- 案例1:完全备份与恢复
- 案例2:增量备份与恢复
- 案例3:差异备份与恢复
- 案例4:binlog日志
1 案例1:完全备份与恢复
1.1 问题
- 练习物理备份与恢复
- 练习mysqldump备份与恢复
1.2 方案
在数据库服务器192.168.88.50 练习数据的备份与恢复
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习物理备份与恢复
冷备份,需停止数据库服务 适合线下服务器。
备份数据
- [root@mysql50 ~]# systemctl stop mysqld
- [root@mysql50 ~]# mkdir /bakdir 创建备份目录
- [root@mysql50 ~]# cp -r /var/lib/mysql /bakdir/mysql.bak 拷贝数据源文件
- [root@mysql50 ~]# cd /var/lib/mysql
- [root@mysql50 mysql]# tar -zcvf /bakdir/mysql.tar.gz ./* 打包压缩数据源文件
- [root@mysql50 mysql]# ls /bakdir/ 查看备份文件
- mysql.bak mysql.tar.gz
删除数据
- [root@mysql50 ~]# rm -rf /var/lib/mysql/*
恢复数据
- [root@mysql50 ~]# tar -xf /bakdir/mysql.tar.gz -C /var/lib/mysql/
- [root@mysql50 ~]# systemctl start mysqld
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | GAMEDB |
- | db1 |
- | home |
- | information_schema |
- | mysql |
- | performance_schema |
- | studb |
- | sys |
- | tarena |
- | 学生库 |
- +--------------------+
- 10 rows in set (0.00 sec)
也可使用cp拷贝的备份文件恢复数据
- [root@mysql50 ~]# systemctl stop mysqld
- [root@mysql50 ~]# rm -rf /var/lib/mysql/*
- [root@mysql50 ~]# cp -r /bakdir/mysql.bak/* /var/lib/mysql/
- [root@mysql50 ~]# chown -R mysql:mysql /var/lib/mysql
- [root@mysql50 ~]# systemctl start mysqld
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a
步骤二:练习mysqldump备份与恢复
热备份,备份和恢复数据库服务必须是运行的
- //备份1张表
- [root@mysql50 ~]# mysqldump -uroot -pNSD2023...a tarena salary > /bakdir/tarena_salary.sql
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- //备份多张表
- [root@mysql50 ~]# mysqldump -uroot -pNSD2023...a tarena employees departments > /bakdir/tarena_employees_deparments.sql
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- //备份1个库
- [root@mysql50 ~]# mysqldump -uroot -pNSD2023...a -B tarena > /bakdir/tarena.sql
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- //备份多个库
- [root@mysql50 ~]# mysqldump -uroot -pNSD2023...a -B studb db1 > /bakdir/studb_db1.sql
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- //备份所有库
- [root@mysql50 ~]# mysqldump -uroot -pNSD2023...a -A > /bakdir/allbak.sql
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- [root@mysql50 ~]#
恢复数据(覆盖恢复数据)
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a
- mysql> drop database tarena; //删除库
- Query OK, 6 rows affected (0.57 sec)
- mysql> exit
- Bye
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a < /bakdir/tarena.sql //恢复数据
- mysql: [Warning] Using a password on the command line interface can be insecure.
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a //登陆
- mysql> use tarena; //进库
- mysql> show tables; //看表
- +------------------+
- | Tables_in_tarena |
- +------------------+
- | departments |
- | employees |
- | salary |
- | stu4 |
- | user |
- | wage_grade |
- +------------------+
- 6 rows in set (0.00 sec)
- mysql> delete from salary; //删除表记录
- Query OK, 8055 rows affected (0.11 sec)
- mysql> exit
- Bye
- [root@mysql50 ~]#
- //使用备份文件恢复数据
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a tarena < /bakdir/tarena_salary.sql
- mysql: [Warning] Using a password on the command line interface can be insecure.
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a //登陆服务
- mysql> select count(*) from tarena.salary; //查看行数
- +----------+
- | count(*) |
- +----------+
- | 8055 |
- +----------+
- 1 row in set (0.00 sec)
分析:
Mysqldump 备份和恢复数据时会锁表,锁表期间无法对表做写访问,mysqldump适合备份数据量比较小的数据或在数据库服务器访问量少的时候备份。
2 案例2:增量备份与恢复
2.1 问题
- 练习数据增量备份
- 练习数据增量恢复
2.2 方案
2.3 准备2台数据库服务器,如表-1所示
增量备份:备份上次备份后,新产生的数据。
PERCONA Xtrabackup是一款强大的在线热备份工具,备份过程中不锁库表,适合生产环境。支持完全备份与恢复、增量备份与恢复、差异备份与恢复。
在192.168.88.50主机完成备份与恢复的练习 。
2.4 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习数据增量备份
安装软件(在mysql50 、MySQL51 两台主机都要安装)
- //把软件拷贝到虚拟机里
- [openeuler@server1 ~]$ scp /linux-soft/s3/percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz root@192.168.88.50:/root/
- //安装依赖
- [root@host50 ~]# yum -y install perl-DBD-MySQL
- //解压源码
- [root@host50 ~ ]# tar -xf percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz
- //移动并改名
- [root@host50 ~ ]# mv percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal /usr/local/percona
- //把命令添加到系统环境变量
- [root@host50 ~ ]# vim /etc/bashrc
- export PATH=/usr/local/percona/bin:$PATH 添加在文件末尾
- :wq
- [root@host50 ~ ]# source /etc/bashrc
- //查看帮助信息
- [root@host50 ~ ]# man xtrabackup (按q 退出)
增量备份(在mysql50主机 完成增量备份练习)
对数据做增量备份前,必须先有一次备份,也就是首次备份,通常是备份所有数据;比如每周周一完全备份,周二到周日增量备份。
周一完全备份(备份所有数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/fullbak --datadir=/var/lib/mysql
- ……
- ……
- 230530 18:18:48 [00] ...done
- xtrabackup: Transaction log of lsn (24822878) to (24822898) was copied.
- 230530 18:18:50 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230610",18,25000,8000);
周二增量备份(备份周一备份后新产生的数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new2 --incremental-basedir=/fullbak --datadir=/var/lib/mysql
- ……
- ……
- 230530 18:33:52 [00] ...done
- xtrabackup: Transaction log of lsn (24827173) to (24827183) was copied.
- 230530 18:33:53 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);
周三增量备份(备份周二备份后新产生的数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new3 --incremental-basedir=/new2 --datadir=/var/lib/mysql
- ……
- ……
- 230530 18:46:17 [00] ...done
- xtrabackup: Transaction log of lsn (24832526) to (24832536) was copied.
- 230530 18:46:18 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);
周四增量备份(备份周三备份后新产生的数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new4 --incremental-basedir=/new3 --datadir=/var/lib/mysql
- ……
- ……
- 230530 18:53:41 [00] ...done
- xtrabackup: Transaction log of lsn (24837561) to (24837571) was copied.
- 230530 18:53:42 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);
周五增量备份(备份周四备份后新产生的数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new5 --incremental-basedir=/new4 --datadir=/var/lib/mysql
- ……
- ……
- 230530 18:58:50 [00] ...done
- xtrabackup: Transaction log of lsn (24841645) to (24841655) was copied.
- 230530 18:58:51 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);
周六增量备份(备份周五备份后新产生的数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new6 --incremental-basedir=/new5 --datadir=/var/lib/mysql
- ……
- ……
- 230530 19:00:55 [00] ...done
- xtrabackup: Transaction log of lsn (24848404) to (24848414) was copied.
- 230530 19:00:56 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);
周日增量备份(备份周六备份后新产生的数据)
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new7 --incremental-basedir=/new6 --datadir=/var/lib/mysql
- ……
- ……
- 230530 19:00:55 [00] ...done
- xtrabackup: Transaction log of lsn (24848404) to (24848414) was copied.
- 230530 19:00:56 completed OK!
- [root@mysql50 ~]#
步骤二:练习数据增量恢复
增量恢复数据步骤:
- 准备恢复数据
- 合并数据
- 清空数据库目录
- 拷贝数据
- 修改数据库目录所有者/组用户为mysql
- 重启数据库服务
具体操作如下:
MySQL51 拷贝 MySQL50 的备份文件到 本机的根目录下
- [root@mysql50 ~]# scp –r root@192.168.88.50:/fullbak /
- [root@mysql50 ~]# scp –r root@192.168.88.50:/new2 /
- [root@mysql50 ~]# scp –r root@192.168.88.50:/new3 /
- [root@mysql50 ~]# scp –r root@192.168.88.50:/new4 /
- [root@mysql50 ~]# scp –r root@192.168.88.50:/new5 /
- [root@mysql50 ~]# scp –r root@192.168.88.50:/new6 /
- [root@mysql50 ~]# scp –r root@192.168.88.50:/new7 /
在MySQL51主机使用备份文件恢复数据
1)、准备恢复数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak
- ……
- ……
- Log background threads are being closed...
- Shutdown completed; log sequence number 24822898
- Number of pools: 1
- 230531 14:32:14 completed OK!
- [root@mysql51 ~]#
2)、合并数据
- //将周二的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是周一 + 周二 的数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak --incremental-dir=/new2
- ……
- ……
- 230531 14:40:05 [00] Copying /new2/binlog.index to ./binlog.index
- 230531 14:40:05 [00] ...done
- 230531 14:40:05 completed OK!
- [root@mysql51 ~]#
- //将周三的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是周一 + 周二 + 周三 的数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak --incremental-dir=/new3
- ……
- ……
- 230531 15:00:37 [00] Copying /new3/binlog.index to ./binlog.index
- 230531 15:00:37 [00] ...done
- 230531 15:00:37 completed OK!
- [root@mysql51 ~]#
- //将周四的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是周一 + 周二 + 周三 +周四的数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak --incremental-dir=/new4
- ……
- ……
- 230531 15:00:37 [00] Copying /new4/binlog.index to ./binlog.index
- 230531 15:00:37 [00] ...done
- 230531 15:00:37 completed OK!
- [root@mysql51 ~]#
- //将周五的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是周一 + 周二 + 周三 +周四+周五的数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak --incremental-dir=/new5
- ……
- ……
- 230531 15:00:37 [00] Copying /new5/binlog.index to ./binlog.index
- 230531 15:00:37 [00] ...done
- 230531 15:00:37 completed OK!
- [root@mysql51 ~]#
- //将周六的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是周一 + 周二 + 周三 +周四+周五+周六的数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak --incremental-dir=/new6
- ……
- ……
- 230531 15:00:37 [00] Copying /new6/binlog.index to ./binlog.index
- 230531 15:00:37 [00] ...done
- 230531 15:00:37 completed OK!
- [root@mysql51 ~]#
- //将周日的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是周一 + 周二 + 周三 +周四+周五+周六+周日的数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/fullbak --incremental-dir=/new7
- ……
- ……
- 230531 15:00:37 [00] Copying /new7/binlog.index to ./binlog.index
- 230531 15:00:37 [00] ...done
- 230531 15:00:37 completed OK!
- [root@mysql51 ~]#
- [root@mysql51 ~]# rm -rf /var/lib/mysql/*
- [root@mysql51 ~]# xtrabackup --copy-back --target-dir=/fullbak
- [root@mysql51 ~]# chown -R mysql:mysql /var/lib/mysql
6)重启数据库服务
- [root@mysql51 ~]# systemctl restart mysqld
7)连接服务查看数据
- [root@mysql51 ~]# mysql -uroot -pNSD2023...a
- mysql> select count(*) from tarena.salary where date=20230710;
- +----------+
- | count(*) |
- +----------+
- | 75 |
- +----------+
- 1 row in set (0.01 sec)
- mysql> select count(*) from tarena.salary where not date=20230710;
- +----------+
- | count(*) |
- +----------+
- | 8067 |
- +----------+
- 1 row in set (0.00 sec)
3 案例3:差异备份与恢复
3.1 问题
- 练习差异备份
- 练习差异恢复
3.2 方案
差异备份:备份完全备份后,新产生的数据。
PERCONA Xtrabackup是一款强大的在线热备份工具,备份过程中不锁库表,适合生产环境。支持差异备份与恢复。
在192.168.88.50主机完成差异备份
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习差异备份
差异备份
对数据做差异备份前,必须先有一次备份,也就是首次备份,通常是备份所有数据;比如每周周一完全备份,周二到周日差异备份。
- //周一完全备份
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:10:02 [00] Writing /allbak/xtrabackup_info
- 230531 17:10:02 [00] ...done
- xtrabackup: Transaction log of lsn (24881353) to (24881373) was copied.
- 230531 17:10:03 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);
周二差异备份,备份周一备份后新产生的数据
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir2 --incremental-basedir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:23:56 [00] Writing /dir2/xtrabackup_info
- 230531 17:23:56 [00] ...done
- xtrabackup: Transaction log of lsn (24886741) to (24886751) was copied.
- 230531 17:23:58 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);
周三差异备份,备份周一备份后新产生的数据
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir3 --incremental-basedir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:27:10 [00] Writing /dir3/xtrabackup_info
- 230531 17:27:10 [00] ...done
- xtrabackup: Transaction log of lsn (24892043) to (24892063) was copied.
- 230531 17:27:11 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);
周四差异备份,备份周一备份后新产生的数据
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir4 --incremental-basedir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:31:00 [00] Writing /dir4/xtrabackup_info
- 230531 17:31:00 [00] ...done
- xtrabackup: Transaction log of lsn (24900560) to (24900580) was copied.
- 230531 17:31:01 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);
周五差异备份,备份周一备份后新产生的数据
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir5 --incremental-basedir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:32:38 [00] Writing /dir5/xtrabackup_info
- 230531 17:32:38 [00] ...done
- xtrabackup: Transaction log of lsn (24906902) to (24906912) was copied.
- 230531 17:32:39 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);
周六差异备份,备份周一备份后新产生的数据
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir6 --incremental-basedir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:41:01 [00] Writing /dir6/xtrabackup_info
- 230531 17:41:01 [00] ...done
- xtrabackup: Transaction log of lsn (24914729) to (24914739) was copied.
- 230531 17:41:02 completed OK!
- [root@mysql50 ~]#
- //插入新数据 (可以插入多行)
- mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);
周日差异,备份备份周一备份后新产生的数据
- [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir7 --incremental-basedir=/allbak --datadir=/var/lib/mysql
- ……
- ……
- 230531 17:43:16 [00] Writing /dir7/xtrabackup_info
- 230531 17:43:16 [00] ...done
- xtrabackup: Transaction log of lsn (24920772) to (24920782) was copied.
- 230531 17:43:17 completed OK!
- [root@mysql50 ~]#
步骤二:练习差异恢复
差异恢复数据步骤:
- 准备恢复数据
- 合并数据
- 清空数据库目录
- 拷贝数据
- 修改数据库目录所有者/组用户为mysql
- 重启数据库服务
具体操作如下:
MySQL51 拷贝 MySQL50 的备份文件到 本机的根目录下
- [root@mysql51 ~]# scp –r root@192.168.88.50:/allbak /
- [root@mysql51 ~]# scp –r root@192.168.88.50:/dir7 /
在MySQL51主机使用备份文件恢复数据
1)、准备恢复数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/allbak
- ……
- ……
- Log background threads are being closed...
- Shutdown completed; log sequence number 24881373
- Number of pools: 1
- 230531 17:59:06 completed OK!
- [root@mysql51 ~]#
2)、合并数据
- //将周日的差异备份与周一的完全备份合并,因为周日的差异备份包扩周二+周日的所有数据
- [root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/allbak --incremental-dir=/dir7
- ……
- ……
- 230531 18:05:08 [00] Copying /dir7/binlog.000029 to ./binlog.000029
- 230531 18:05:08 [00] ...done
- 230531 18:05:08 [00] Copying /dir7/binlog.index to ./binlog.index
- 230531 18:05:08 [00] ...done
- 230531 18:05:08 completed OK!
- [root@mysql51 ~]#
- [root@mysql51 ~]# rm -rf /var/lib/mysql/*
- [root@mysql51 ~]# xtrabackup --copy-back --target-dir=/allbak
- [root@mysql51 ~]# chown -R mysql:mysql /var/lib/mysql
6)重启数据库服务
- [root@mysql51 ~]# systemctl restart mysqld
7)连接服务查看数据
- [root@mysql51 ~]# mysql -uroot -pNSD2023...a
- mysql> select count(*) from tarena.salary where date=20230810;
- +----------+
- | count(*) |
- +----------+
- | 75 |
- +----------+
- 1 row in set (0.01 sec)
- mysql> select count(*) from tarena.salary where not date=20230810;
- +----------+
- | count(*) |
- +----------+
- | 8067 |
- +----------+
- 1 row in set (0.00 sec)
4 案例4:binlog日志
4.1 问题
- 查看正在使用的binlog日志文件
- 自定义日志目录和日志名
- 手动创建新的日志文件
- 练习日志相关命令的使用
- 使用日志恢复数据
4.2 方案
binlog日志介绍:
- 也称做 二进制日志
- MySQL服务日志文件的一种
- 保存除查询之外的所有SQL命令
- 可用于数据的备份和恢复
- 配置mysql主从同步的必要条件
- 准备新的数据库服务器如表-1,做binlog日志的练习
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:查看正在使用的binlog日志文件
在新创建的数据库服务器做如下操作:
- [root@mysql52 ~]# yum -y install mysql-server mysql 安装软件
- [root@mysql52 ~]# systemctl start mysqld 启动服务
- [root@mysql52 ~]# mysql 连接服务
- mysql> show master status; 查看日志文件
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | binlog.000001 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- 执行查询命令
- mysql> select count(*) from mysql.user;
- +----------+
- | count(*) |
- +----------+
- | 4 |
- +----------+
- 1 row in set (0.00 sec)
- mysql> show master status; 执行查询命令 日志偏移量不变
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | binlog.000001 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- 执行建库、建表命令
- mysql> create database db1;
- Query OK, 1 row affected (0.07 sec)
- mysql> create table db1.user(name char(10));
- Query OK, 0 rows affected (0.52 sec)
- mysql> show master status; 执行写命令 日志偏移量改变
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | binlog.000001 | 535 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- mysql> insert into db1.user values("jim"); 插入记录
- Query OK, 1 row affected (0.10 sec)
- mysql> show master status; 执行写命令 日志偏移量改变
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | binlog.000001 | 809 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- mysql>
步骤二:自定义日志目录和日志名
日志文件默认保存在/var/lib/mysql目录下,默认日志名binlog
- [root@mysql52 ~]# vim /etc/my.cnf.d/mysql-server.cnf
- [mysqld]
- log-bin=/mylog/mysql52 //定义日志目录和日志文件名(手动添加)
- :wq
- [root@mysql52 ~]# mkdir /mylog 创建目录
- [root@mysql52 ~]# chown mysql /mylog 修改目录所有者mysql用户
- [root@mysql52 ~]# setenforce 0 关闭selinux
- [root@mysql52 ~]# systemctl restart mysqld 重启服务
- [root@mysql52 ~]# ls /mylog/ 查看日志目录
- mysql52.000001 mysql52.index
- [root@mysql52 ~]# mysql 登陆服务
- Mysql> show master status ; 查看日志信息
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000001 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
步骤三:手动创建新的日志文件
默认日志文件容量大于1G时会自动创建新的日志文件,在日志文件没写满时,执行的所有写命令都会保存到当前使用的日志文件里。
- //刷新前查看
- mysql> show master status;
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000001 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- mysql> flush logs; //刷新日志
- Query OK, 0 rows affected (0.22 sec)
- mysql> flush logs; //刷新日志
- Query OK, 0 rows affected (0.16 sec)
- mysql> show master status; //刷新一次创建一个新日志
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000003 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- //只要服务重启就会创建新日志
- [root@mysql52 ~]# systemctl restart mysqld
- [root@mysql52 ~]# mysql 连接服务
- Mysql> show master status; 查看日志
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000004 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- [root@mysql52 ~]#
- //完全备份后创建新的日志文件,创建的日志个数和备份库的个数一致
- [root@mysql52 ~]# mysqldump --flush-logs mysql user > user.sql
- [root@mysql52 ~]# mysql -e 'show master status'
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000005 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- [root@mysql52 ~]# mysqldump --flush-logs -B mysql db1 > db_2.sql
- [root@mysql52 ~]# mysql -e 'show master status'
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000007 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- [root@mysql52 ~]#
步骤四:练习日志相关命令的使用
MySQL服务提供了管理日志的专属命令,具体练习如下:
- //查看已有的日志文件
- mysql> show binary logs;
- 日志文件名 日志大小(字节) 加密(no/yes)
- +----------------+-----------+-----------+
- | Log_name | File_size | Encrypted |
- +----------------+-----------+-----------+
- | mysql52.000001 | 201 | No |
- | mysql52.000002 | 201 | No |
- | mysql52.000003 | 179 | No |
- | mysql52.000004 | 201 | No |
- | mysql52.000005 | 201 | No |
- | mysql52.000006 | 201 | No |
- | mysql52.000007 | 156 | No |
- +----------------+-----------+-----------+
- 7 rows in set (0.00 sec)
- //查看正在使用的日志
- mysql> show master status;
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000007 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- //插入记录
- mysql> insert into db1.user values("yaya");
- Query OK, 1 row affected (0.04 sec)
- //查看日志文件内容
- mysql> show binlog events in "mysql52.000007";
- Log_name: 日志文件名。
- Pos: 命令在日志文件中的起始位置。
- Event_type: 事件类型,例如 Query、Table_map、Write_rows 等。
- Server_id: 服务器 ID。
- End_log_pos:命令在文件中的结束位置,以字节为单位。
- Info:执行命令信息。
- +----------------+-----+----------------+-----------+-------------+--------------------------------------+
- | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
- +----------------+-----+----------------+-----------+-------------+--------------------------------------+
- | mysql52.000007 | 4 | Format_desc | 1 | 125 | Server ver: 8.0.26, Binlog ver: 4 |
- | mysql52.000007 | 125 | Previous_gtids | 1 | 156 | |
- | mysql52.000007 | 156 | Anonymous_Gtid | 1 | 235 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql52.000007 | 235 | Query | 1 | 306 | BEGIN |
- | mysql52.000007 | 306 | Table_map | 1 | 359 | table_id: 108 (db1.user) |
- | mysql52.000007 | 359 | Write_rows | 1 | 400 | table_id: 108 flags: STMT_END_F |
- | mysql52.000007 | 400 | Xid | 1 | 431 | COMMIT /* xid=649 */ |
- +----------------+-----+----------------+-----------+-------------+--------------------------------------+
- 7 rows in set (0.00 sec)
- //删除日志文件名之前的所有日志文件
- mysql> purge master logs to "mysql52.000004";
- Query OK, 0 rows affected (0.10 sec)
- //查看已有的日志文件
- mysql> show binary logs;
- +----------------+-----------+-----------+
- | Log_name | File_size | Encrypted |
- +----------------+-----------+-----------+
- | mysql52.000004 | 201 | No |
- | mysql52.000005 | 201 | No |
- | mysql52.000006 | 201 | No |
- | mysql52.000007 | 431 | No |
- +----------------+-----------+-----------+
- 4 rows in set (0.00 sec)
- //删除所有日志文件,并重新创建日志文件
- mysql> reset master;
- Query OK, 0 rows affected (0.14 sec)
- //查看已有的日志文件 ,仅有第1个文件了
- mysql> show binary logs;
- +----------------+-----------+-----------+
- | Log_name | File_size | Encrypted |
- +----------------+-----------+-----------+
- | mysql52.000001 | 156 | No |
- +----------------+-----------+-----------+
- 1 row in set (0.00 sec)
步骤五:使用日志恢复数据
把查看到的文件内容管道给连接mysql服务的命令执行
恢复数据命令:
mysqlbinlog /目录/文件名 | mysql –uroot -p密码
1)在mysql52主机执行如下操:
- //重置日志
- mysql> reset master;
- Query OK, 0 rows affected (0.09 sec)
- //查看日志
- mysql> show master status;
- +----------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +----------------+----------+--------------+------------------+-------------------+
- | mysql52.000001 | 156 | | | |
- +----------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
- //建库、
- mysql> create database gamedb;
- Query OK, 1 row affected (0.07 sec)
- //建表
- mysql> create table gamedb.t1(name char(10),class char(3));
- Query OK, 0 rows affected (0.55 sec)
- //插入记录
- mysql> insert into gamedb.t1 values ("yaya","nsd");
- Query OK, 1 row affected (0.08 sec)
- mysql> insert into gamedb.t1 values ("yaya","nsd");
- Query OK, 1 row affected (0.04 sec)
- mysql> insert into gamedb.t1 values ("yaya","nsd");
- Query OK, 1 row affected (0.08 sec)
- //查看表记录
- mysql> select * from gamedb.t1;
- +------+-------+
- | name | class |
- +------+-------+
- | yaya | nsd |
- | yaya | nsd |
- | yaya | nsd |
- +------+-------+
- 3 rows in set (0.00 sec)
- mysql> exit
- //把日志文件拷贝给恢复数据的服务器,比如 mysql50
- [root@mysql52 ~]# scp /mylog/mysql52.000001 root@192.168.88.50:/root/
- The authenticity of host '192.168.88.50 (192.168.88.50)' can't be established.
- ECDSA key fingerprint is SHA256:t7J3okFd0o+9zTmFCIetvDl6mxGCmc43VoD6C65zico.
- Are you sure you want to continue connecting (yes/no/[fingerprint])? Yes 同意
- Warning: Permanently added '192.168.88.50' (ECDSA) to the list of known hosts.
- root@192.168.88.50's password: mysql50的密码
- mysql52.000001 100% 1410 1.6MB/s 00:00
- [root@mysql52 ~]#
2)在MySQL50 使用日志恢复数据
- //查看日志
- [root@mysql50 ~]# ls /root/mysql52.000001
- /root/mysql52.000001
- //执行日志恢复数据
- [root@mysql50 ~]# mysqlbinlog /root/mysql52.000001 | mysql -uroot -pNSD2023...a
- mysql: [Warning] Using a password on the command line interface can be insecure.
- //连接服务查看数据
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a -e 'select * from gamedb.t1'
- mysql: [Warning] Using a password on the command line interface can be insecure.
- +------+-------+
- | name | class |
- +------+-------+
- | yaya | nsd |
- | yaya | nsd |
- | yaya | nsd |
- +------+-------+
- [root@mysql50 ~]#
相关文章:

完全备份、增量备份、差异备份、binlog日志
Top NSD DBA DAY06 案例1:完全备份与恢复案例2:增量备份与恢复案例3:差异备份与恢复案例4:binlog日志 1 案例1:完全备份与恢复 1.1 问题 练习物理备份与恢复练习mysqldump备份与恢复 1.2 方案 在数据库服务器192…...

Flutter实现Service + UI 全面跨平台
作者:Karl_wei 前言: Flutter作为跨平台的UI框架,其可行性已经被市场所认可。UI跨端后,我们自然会希望一些运行在终端的小服务也能跨端,特别是当这个小服务还涉及到一些 UI 的展示。 我们希望Flutter能承担这个角色&…...

微软商店的ubuntu 连不上网Temporary failure in name resolution
背景:win10 下载docker时需要wsl2,下了个微软商店的Ubuntu 。写这篇文章的原因是当时查了资料ubuntu的问题和微软下载的Ubuntu还是有一些区别,问题不好解决,故写此文。 问题:用命令ifconfig eth0 down后再执行ifconfi…...

“深入剖析JVM内部工作原理:解密Java虚拟机“
标题:深入剖析JVM内部工作原理:解密Java虚拟机 摘要: 本文将深入剖析Java虚拟机(JVM)的内部工作原理,包括类加载、运行时数据区、垃圾回收、即时编译等关键概念和机制。通过对JVM的解密,我们将…...

数据结构与算法基础
一、基本概念和术语 (一)数据元素、数据结构、抽象数据类型等概念 (二)算法设计的基本要求 (三)语句的频度和估算时间复杂度 二、线性表 (一)线性表的定义和基本操作 (…...

人工智能任务1-【NLP系列】句子嵌入的应用与多模型实现方式
大家好,我是微学AI,今天给大家介绍一下人工智能任务1-【NLP系列】句子嵌入的应用与多模型实现方式。句子嵌入是将句子映射到一个固定维度的向量表示形式,它在自然语言处理(NLP)中有着广泛的应用。通过将句子转化为向量…...

【Java并发编程面试题(60道)】
toc Java并发编程面试题(60道) 基础 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单位。 并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻,只有一个执行&…...

Python:逢七拍腿游戏
场景模拟: 通过在 for 循环中使用 continue 语句实现计算拍腿次数,即计算从1到100(不包括100),一共有多少个尾数为7或7的倍数这样的游戏,代码如下: total 99 # 记…...

esp32C3 micropython oled 恐龙快跑游戏
目录 简介 效果展示 源代码 main.py ssd1306.py 实现思路 血量值 分数 恐龙 障碍物 得分与血量值的计算 简介 使用合宙esp32c3模块,基于micropython平台开发的一款oled小游戏,恐龙快跑,所有代码已经给出,将两个py文件…...

53.Linux day03 文件查看命令,vi/vim常用命令
今天进行了新的学习。 目录 1.cat a.查看单个文件的内容: b.查看多个文件的内容: c.将多个文件的内容连接并输出到一个新文件: d.显示带有行号的文件内容: 2.more 3.less 4.head 5.tail 6.命令模式 7.插入模式 8.图…...

YOLOv8改进后效果
数据集 自建铁路障碍数据集-包含路障,人等少数标签。其中百分之八十作为训练集,百分之二十作为测试集 第一次部署 版本:YOLOv5 训练50epoch后精度可达0.94 mAP可达0.95.此时未包含任何改进操作 第二次部署 版本:YOLOv8改进版本 首…...

小程序的数据绑定和事件绑定
小程序的数据绑定 1.需要渲染的数据放在index.js中的data里 Page({data: {info:HELLO WORLD,imgSrc:/images/1.jpg,randomNum:Math.random()*10,randomNum1:Math.random().toFixed(2)}, }) 2.在WXML中通过{{}}获取数据 <view>{{info}}</view><image src"{{…...

第四章MyBatis核心配置文件
environments与environment标签 environments主要用来配置环境,属性default表示默认环境,值为environment的idenvironment为具体环境,属性id表示环境唯一标识environments可以有多个environment 加载默认环境 sqlSessionFactory sqlSessi…...

⛳ Docker - Centos 安装配置
目录 ⛳ Docker - Centos 安装配置🏭 Docker 安装:📢 一、安装依赖包💬 二、添加 Docker 下载源地址🐾 三、更新yum缓存👣 四、安装Docker💻 五、启动Docker🎁 六、查看Docker状态和…...
Python web实战之Django 的跨站点请求伪造(CSRF)保护详解
关键词:Python、Web、Django、跨站请求伪造、CSRF 大家好,今天我将分享web关于安全的话题:Django 的跨站点请求伪造(CSRF)保护,介绍 CSRF 的概念、原理和保护方法. 1. CSRF 是什么? CSRF&#…...

ARM(汇编指令)
.global _start _start:/*mov r0,#0x5mov r1,#0x6 bl LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0mov pc,lr*/ mov r0,#0x1mov r1,#0x0mov r2,#0x64bl Loop Loop:cmp r0,r2bhi stopadd r1,r1,r0add r0,r0,#0x01mov pc,lr stop:B stop.end...

神经网络基础-神经网络补充概念-01-二分分类
概念 二分分类是一种常见的机器学习任务,其目标是将一组数据点分成两个不同的类别。在二分分类中,每个数据点都有一个与之关联的标签,通常是“正类”或“负类”。算法的任务是根据数据点的特征来学习一个模型,以便能够准确地将新…...

Linux16(1) 线程同步
目录 1、概念 2、线程的实现: 3、线程同步: 4、使用信号量: 5、使用信号量实现进程同步: 6、使用互斥锁 7、使用互斥锁实现线程同步 8、读写锁 9、使用读写锁 10、使用读写锁实现进程同步 1、概念 线程:进程…...

深入探讨lowess算法:纯C++实现与局部加权多项式回归的数据平滑技术
引言 在统计学和数据科学中,有时我们面对的数据是嘈杂的、充满噪声的。为了更好地揭示数据的潜在趋势和结构,数据平滑技术成为了一个重要工具。lowess或称为局部加权多项式回归是其中的一种流行方法,它对每一个点给予一个权重,根…...

Sui安全篇|详解零知识证明 (ZKP) Groth16的可塑性
Sui Move允许用户使用Groth16进行高效验证任何非确定性多项式时间(Non-deterministic Polynomial time ,NP)状态。Groth16是一种高效且广泛使用的零知识简洁非交互知识证明(Zero-Knowledge Succinct Non-interactive Argument of …...

记录--webpack和vite原理
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 每次用vite创建项目秒建好,前几天用vue-cli创建了一个项目,足足等了我一分钟,那为什么用 vite 比 webpack 要快呢,这篇文章带你梳理清楚它们的原理…...

Windows系统中使用bat脚本启动git bash 并运行指定命令 - 懒人一键git更新
目标 双击"autoGitPull.bat",自动打开git bash,并cd到项目,逐个git pull,保留git bash窗口展示进度。 脚本 start "" "D:\Program Files\Git\git-bash.exe" -c "echo autoGitPull &&…...

elementui form组件出现英文提示
今天让解决一个bug,是表单组件提示词会出现英文。 问题情景如下: 有时会出现中文,有时会出现英文。 解决方法: 经查看,代码采用的是elementui的form组件,在el-form-item中使用了required属性,同…...

使用windows Api简单验证ISO9660文件格式,以及装载和卸载镜像文件
使用IIsoImageManager接口简单验证ISO镜像文件正确性,使用AttachVirtualDisk装载ISO镜像文件,和使用DetachVirtualDisk卸载,(只支持windows 8及以上系统) 导读 IIsoImageManager 验证ISO文件正确性AttachVirtualDisk 装载镜像文件DetachVirtualDisk 卸载镜像文件其他相关函…...

iPhone 15受益:骁龙8 Gen 3可能缺席部分安卓旗舰机
明年一批领先的安卓手机的性能可能与今年的机型非常相似。硅成本的上涨可能是原因。 你可以想象,2024年许多最好的手机都会在Snapdragon 8 Gen 3上运行,这是高通公司针对移动设备的顶级芯片系统的更新,尚未宣布。然而,来自中国的…...

理解持续测试,才算理解DevOps
软件产品的成功与否,在很大程度上取决于对市场需求的及时把控,采用DevOps可以加快产品交付速度,改善用户体验,从而有助于保持领先于竞争对手的优势。 作为敏捷开发方法论的一种扩展,DevOps强调开发、测试和运维不同团…...

使用OpenCV与深度学习从视频和图像中精准识别人脸: Python实践指南
第一部分: 引言与背景 人脸识别已经成为了当代技术领域中最热门和广泛应用的话题之一。从智能手机的解锁功能到机场的安全检查,人脸识别技术无处不在。在这篇文章中,我们将使用Python中的OpenCV库和深度学习模型,深入探讨如何从视频和图像中…...

面试之快速学习C++11-完美转发,nullptr, shared_ptr,unique_ptr,weak_ptr,shared_from_this
完美转发及其实现 函数模版可以将自己的参数完美地转发给内部调用的其他函数。所谓完美,即不仅能准确地转发参数的值,还能保证被转发参数的左右值属性不变引用折叠:如果任一引用为左值引用,则结果为左值引用,否则为右…...

android resoure资源图片颜色值错乱
最近androidstudio开发,添加一些颜色值或者drawable资源文件时,运行app,颜色值或者图片对应不上,暂时找不到原因,望告知。 暂时解决方法:...

leetcode第 357/358 场周赛
2817. 限制条件下元素之间的最小绝对差 可能别人有更好的解法,我这写法是不断往线段树中插入数值,每次先插入nums[i-x],然后搜索(1到i)中的最大值和(i到max)中的最小值去更新ans。 class Solution { public:struct node{int mx,…...