当前位置:网站首页>MySQL远程备份策略举例
MySQL远程备份策略举例
2022-08-04 19:04:00 【墨天轮】
一台机器安装mysql客户端工具,最好和数据库的版本一致,不然可能存在问题。
获取软件压缩包: wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.27-el7-x86_64.tar.gz
使用此mysql客户端工具的mysqldump远程进行备份。具体如下:
需要能远程连接数据库
mysql -h ip -u root -p
一、创建远程用户
mysql -u root -puse mysqlcreate user 'zcbackuser'@'localhost' identified by 'Enmo123';flush privileges;grant all privileges on *.* to 'zcbackuser'@'%' identified by 'Enmo123' with grant option;#grant all privileges on dbname.* to 'zcbackuser'@'%' identified by 'Enmo123' with grant option;flush privileges;
二、查看权限
mysql> show grants;+-------------------------------------------------------------+| Grants for [email protected]% |+-------------------------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |+-------------------------------------------------------------+1 row in set (0.04 sec)
如果是 Grants for [email protected]%localhost ,则远程主机不允许除了localhost以外其他登录。需要修改权限
%表示都可以连,可以在这里限制远程ip
grant all on dbname.* to 'username'@'%' identified by 'password';
附:远程修改密码:
mysqladmin -h ip -uroot -p123456 password 密码
远程登录主机的密码是远程root,而不是要登录的远程主机它自己本身的密码,两者不相同。
三、查看数据量
1.进入information_schema,查看所有数据库大小
use information_schema;select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables;mysql> use information_schema;Database changedmysql>mysql> select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables;+--------+| data |+--------+| 2.48MB |+--------+1 row in set (0.26 sec)
2.查看指定数据库大小
use information_schema;select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='数据库名';
3.查看指定数据库的某个表的大小
use information_schema;select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home' and table_name='表名';
四、远程备份策略
1.简单远程备份(不加锁,可以在业务运行备份)
./mysqldump -h 172.20.10.8 -u username -p'passwd' --single-transaction --default-character-set=utf8 --set-gtid-purged=off --skip-opt database1 > /tmp/database_db.sql 2>&1
--opt 等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用.--single-transaction (为了获取一致性备份) 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。 这个选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。 要想导出大表的话,应结合使用--quick 选项。--set-gtid-purged=off MySQL5.6以后,加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。 可以通过添加--set-gtid-purged=off ,控制不在备份文件中添加SET @@GLOBAL.GTID_PURGED语句,导入库中应该重新生产GTID,而不用原来的。 如果是备份恢复到新环境,则要关闭。 当需要构建主从的时候,主库上有许多数据需要先备份出来并恢复到从库上,以此来保持两个库没有差异, 然后再去配置主从。这种场景下一定要用on——对于想要基于GTID实现主从复制的从库来说,从库是基于 MASTER_AUTO_POSITION=1自动获取并应用GTID的。因此如果再主库导出的备份文件中没有GTID, 那么从库无法自动获取并应用GTID。
2.每周天的晚上十点半开始做备份。文件格式为 /tmp/database_db_2022-08-04-001306.sql
30 22 * * 0 /usr/local/mysql/bin/mysqldump -h 172.20.10.8 -u username -p'passwd' --single-transaction --set-gtid-purged=off --skip-opt --default-character-set=utf8 database1 > /tmp/database_db_`date +\%Y-\%m-\%d-\%H\%M\%S`.sql 2>&1
3.需要压缩如下:
30 22 * * 0 /usr/local/mysql/bin/mysqldump -h 172.20.10.8 -u username -p'passwd' --single-transaction --set-gtid-purged=off --skip-opt --default-character-set=utf8 database1 | gzip > /tmp/database_db_`date +\%Y-\%m-\%d-\%H\%M\%S`.sql.gz 2>&1#解压命令: gunzip backup.sql.gz
4.使用备份脚本的备份
30 22 * * 0 sh /tmp/back.sh 2>&1
back.sh如下
#!/bin/bash/usr/local/mysql/bin/mysqldump -h 172.20.10.8 -u username -p'passwd' --single-transaction --set-gtid-purged=off --skip-opt --default-character-set=utf8 database1 > /tmp/database_db_`date +\%Y-\%m-\%d-\%H\%M\%S`.sql
压缩版 back.sh
#!/bin/bash/usr/local/mysql/bin/mysqldump -h 172.20.10.8 -u username -p'passwd' --single-transaction --set-gtid-purged=off --skip-opt --default-character-set=utf8 database1 | gzip > /tmp/database_db_`date +\%Y-\%m-\%d-\%H\%M\%S`.sql.gz
5.可以选择加上备份报错日志 --log-error 把报错输出到类似于mysqldump_error_log_2022-08-03-015721.err的日志
./mysqldump -h 172.20.10.2 -u zcbackuser -p'Enmo123' --single-transaction --default-character-set=utf8 --set-gtid-purged=off --skip-opt --log-error=/tmp/mysqldump_error_log_`date +\%Y-\%m-\%d-\%H\%M\%S`.err test1| gzip > /tmp/test1_`date +\%Y-\%m-\%d-\%H\%M\%S`.sql.gz 2>&1
注:可能会出现如下报错,最好使用同样版本的客户端。
mysqldump: Couldn’t execute ‘SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, ‘$.“number-of-buckets-specified”’) FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = ‘test1’ AND TABLE_NAME = ‘shop’;’: Unknown table ‘column_statistics’ in information_schema (1109);
五、远程备份的效果基本如下:
[[email protected] bin]# ./mysqldump -h 172.20.10.2 -u zcbackuser -p'Enmo123' --default-character-set=utf8 --set-gtid-purged=off --skip-opt --single-transaction --log-error=/tmp/mysqldump_error_log_`date +\%Y-\%m-\%d-\%H\%M\%S`.err test1| gzip > /tmp/test1_`date +\%Y-\%m-\%d-\%H\%M\%S`.sql.gz 2>&1mysqldump: [Warning] Using a password on the command line interface can be insecure.[[email protected] bin]# cd /tmp[[email protected] tmp]# lltotal 12drwxr-xr-x 2 root root 18 Jul 7 20:54 hsperfdata_root-rw-r--r-- 1 root root 73 Jul 7 19:22 lua_zvpodh-rw-r--r-- 1 root root 320 Aug 3 01:57 mysqldump_error_log_2022-08-03-015721.err-rw-r--r-- 1 root root 608 Aug 3 01:57 test1_2022-08-03-015721.sql.gz[[email protected] tmp]# gunzip test1_2022-08-03-015721.sql.gz [[email protected] tmp]# cat test1_2022-08-03-015721.sql ---- MySQL dump 10.13 Distrib 8.0.27, for Linux (x86_64)---- Host: 172.20.10.2 Database: test1-- -------------------------------------------------------- Server version 5.7.19/*!40103 SET @[email protected]@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;---- Table structure for table `shop`--/*!40101 SET @saved_cs_client = @@character_set_client */;/*!50503 SET character_set_client = utf8mb4 */;CREATE TABLE `shop` ( `id` int(20) DEFAULT NULL, `name` varchar(25) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;/*!40101 SET character_set_client = @saved_cs_client */;---- Dumping data for table `shop`--INSERT INTO `shop` VALUES (1,'ysl');INSERT INTO `shop` VALUES (2,'enmo');
附录:MySQL的mysqldump默认带的参数
这些参数,执行mysqldump 命令的时候默认就会带上的。
–opt –add-drop-table –add-locks -i,–comments -a,–create-options -e, –extended-insert -l, –lock-tables -q, –quick -K, –disable-keys -Q, –quote-names –dump-date –ssl –triggers –tz-utc
边栏推荐
猜你喜欢
随机推荐
目标检测的发展与现状
HCIA-R&S自用笔记(22)STP状态与计时器、STP拓扑变化、STP配置及实验
PHP代码审计8—SSRF 漏洞
HCIP-R&S By Wakin自用笔记(1)企业网络高级解决方案
路由技术
直播回顾|7 月 Pulsar 中文开发者与用户组会议
方法的重写
ACP-Cloud Computing By Wakin自用笔记(2)CPU和内存虚拟化
Pedestrian fall detection experiment based on YOLOV5
【CCIG 2022】视觉大模型论坛
Usage of collect_list in Scala105-Spark.sql
将网页变成字符串,并保存起来
[Distributed Advanced] Let's fill in those pits in Redis distributed locks.
vantui 组件 van-field 路由切换时,字体样式混乱问题
LVS+Keepalived群集
PHP代码审计9—代码执行漏洞
LVS+NAT 负载均衡群集,NAT模式部署
12. SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值
如何让 JS 代码不可断点
天呐,七夕我收到9份告白~