Loading

快速运维 - 数据库 达梦/MySQL/...

MySQL

自动登录

[client]
user=root
password=Blacksheepwall@123
host=127.0.0.1

授权命令

grant all privileges on *.* to root@'%' identified by '123456' with grant option ;
flush privileges;

备份数据库

mysqldump

需要在my.cnf 配置好登录信息

#!/bin/bash
# 获取当前日期
backup_date=$(date +%Y%m%d)
# 备份目录
backup_dir="/TRS/BACKUP/mysql/${backup_date}"
# 创建备份目录
mkdir -p "${backup_dir}"
# 获取MySQL登录信息
mysql_login="mysql --defaults-extra-file=/etc/my.cnf"
# 锁定数据库表
${mysql_login} -e "FLUSH TABLES WITH READ LOCK;"
# 开始备份
${mysql_login} -e "SHOW DATABASES;" | grep -Ev "Database|information_schema|performance_schema|sys" | while read -r database; do
    echo "Dumping database: ${database}"
    mysqldump --defaults-extra-file=/etc/my.cnf "${database}" | gzip > "${backup_dir}/${database}.sql.gz"
done
# 解锁数据库表
${mysql_login} -e "UNLOCK TABLES;"
echo "备份完成!"

mydumerp

使用第三方工具 mydumer 来进行备份

#!/bin/bash
# 还原环境变量等
source /etc/profile
# 捕获退出信号
# 时间
d=$(date -d "-1 day" "+%Y-%m-%d")
# -u:用户
# -t:线程
# -r:将表按行分块(条数(
# -B:目标库
# -m:不备份表结构
# -e:即使表为空也会生成
# -v:详细输出
# -o:输出目录
# -c:压缩模式
# 输出到日志
touch /TRS/BACKUP
find /TRS/BACKUP -maxdepth 1 -type d -mtime +3 -exec rm -rf {} \;
mkdir -p /TRS/BACKUP/$d/IIP

mydumper -u root -p <password> -h <数据库主机> -t 8 -r 100000 -B <数据库名> -e -v 3 -o /TRS/BACKUP/$d/IIP/ -c -L /TRS/BACKUP/$d/IIP/$d.backuplog

达梦数据库

定制备份策略

根据应用需求,定制备份策略如下所示
备份类型 备份周期 备份时间
全量备份 每周 每周六 23 点
增量备份 每天 除周六外每天 23 点
删除备份 每天 每天 23 点 30 30天

  1. 登录数据库执行以下命令,创建作业系统表
SP_INIT_JOB_SYS(1);
  1. 全量备份(每周六 23 点全备):其中有1分钟后的一次性全备调度,执行完成后检查备份是否成功。
call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakfull');
call SP_ADD_JOB_STEP('bakfull', 'bak1', 6, '01020000/dmdata/dmbak/', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 64, 0, '23:00:00', NULL, '2021-11-01 21:17:22', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');
  1. 增量备份(每周除周六外每天 23 点增量备份):
call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '41010000/dmdata/dmbak/|/dmdata/dmbak/', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2021-11-01 21:19:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');
  1. 备份定期删除(每天 23:30 删除 30 天前备份):
call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('delbak');
call SP_ADD_JOB_STEP('delbak','bak1',0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/TRS/DMbackup/'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2020-11-02 14:48:41', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');
  1. 另外添加自动收集统计信息的任务(每天1点收集全库统计信息)
call SP_CREATE_JOB('statistics',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('statistics');
call SP_ADD_JOB_STEP('statistics', 'statistics1', 0, 'begin
for rs in (select ''sf_set_SESSION_para_value(''''HAGR_HASH_SIZE'''',(select cast(
case when max(table_rowcount(owner,table_name))<=(select max_value from v$dm_ini 
where para_Name=''''HAGR_HASH_SIZE'''') and max(table_rowcount(owner,table_name))>=(
select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''')  then 
max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))<(
select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then
 (select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') else 
 (select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') end as bigint) 
 from dba_tables where owner=''''''||NAME||''''''));''
sql1,''DBMS_STATS.GATHER_SCHEMA_STATS(''''''||NAME||'''''',100,TRUE,''''FOR ALL COLUMNS SIZE AUTO'''');'' 
sql2
 from SYS.SYSOBJECTS where TYPE$=''SCH'' ) loop
execute  immediate rs.sql1;
execute  immediate rs.sql2;
end loop;
end;', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('statistics', 'statistics1', 1, 2, 1, 64, 0, '01:00:00', NULL, '2021-06-09 22:54:37', NULL, '');
call SP_JOB_CONFIG_COMMIT('statistics');

说明:每周6凌晨1点开始收集。
注意:上线前,必须提前48小时,完成数据迁移和统计信息收集。

测试备份作业执行

-- 先查询对应作业的ID
select * from sysjob.sysjobs;

-- 手动执行作业()内填写作业ID
call SP_DBMS_JOB_RUN(1682580311);

-- 执行完后再对应路径下查看是否有全备的作业,注意:没有一份全备文件前,增量备份作业无法执行成功。
posted @ 2023-10-25 11:48  p#ssw0rd  阅读(27)  评论(0编辑  收藏  举报