一、需求: 定时备份数据库数据 二、分析: 1。定时任务 2。备份数据库表结构和数据 三、实现: 1。pom文件: lt;?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsdmodelVersion4。0。0modelVersionparentgroupIdorg。springframework。bootgroupIdspringbootstarterparentartifactIdversion2。2。2。RELEASEversionrelativePath!lookupparentfromrepositoryparentgroupIdcom。kevingroupIdbackupdatabaseartifactIdversion1。0SNAPSHOTversionpackagingjarpackagingpropertiesjava。version1。8java。versionpropertiesdependencies!https:mvnrepository。comartifactmysqlmysqlconnectorjavadependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdversion8。0。15versiondependency!https:mvnrepository。comartifactcom。alibabadruiddependencygroupIdcom。alibabagroupIddruidartifactIdversion1。1。20versiondependency!https:mvnrepository。comartifactorg。mybatismybatisdependencygroupIdorg。springframework。bootgroupIdspringbootstarterartifactIdversion2。2。4。RELEASEversiondependencydependencygroupIdorg。awaitilitygroupIdawaitilityartifactIdversion3。1。2versionscopetestscopedependencydependenciesbuildpluginsplugingroupIdorg。springframework。bootgroupIdspringbootmavenpluginartifactIdpluginpluginsbuildproject 2。application。yml文件 1hr2hr3hr4hr5hr6hr7hr8hr9hrspring: datasource: driverclassname:com。mysql。jdbc。Driver url:jdbc:mysql:192。168。100。120:3306test01?useSSLfalseautoReconnecttruecharacterEncodingUTF8serverTimezoneGMT2B8 username:kevin02 password:Kevin123! sqlbackup: path:exportserversdbbackup 3。BackUpDataBaseManager具体操作数据库备份 packagecom。kevin。manager;importorg。slf4j。Logger;importorg。slf4j。LoggerFactory;importorg。springframework。beans。factory。annotation。Value;importorg。springframework。stereotype。Service;importjava。io。File;importjava。io。IOException;authordellversion:task。javav1。0,2020年01月18日12:47Description数据库操作ServicepublicclassBackUpDataBaseManager{privatestaticfinalLoggerlogLoggerFactory。getLogger(BackUpDataBaseManager。class);Value({spring。datasource。driverclassname})privateStringdriverClassName;Value({spring。datasource。url})privateStringurl;Value({spring。datasource。username})privateStringuserName;Value({spring。datasource。password})privateStringpassword;Value({sqlbackup。path})privateStringsqlPath;获取数据库名publicStringgetDataBaseName(){returnurl。substring(url。indexOf(3306),url。indexOf(?))。replaceAll(,)。replaceAll(3306,);}获取主机地址privateStringgetHost(){returnurl。substring(url。indexOf(mysql),url。indexOf(3306))。replace(:,)。replace(,)。replace(mysql,);}导出sql并返回相关信息publicvoidexportSql(Stringtime){指定导出的sql存放的文件夹FilesaveFilenewFile(sqlPath);if(!saveFile。exists()){saveFile。mkdirs();}StringhostgetHost();StringdataBaseNamegetDataBaseName();StringfileNametimecloudpm。sql;StringBuildersbnewStringBuilder();拼接备份命令sb。append(mysqldump)。append(opt)。append(h)。append(host)。append(user)。append(userName)。append(password)。append(password);sb。append(resultfile)。append(sqlPathfileName)。append(defaultcharactersetutf8)。append(dataBaseName);try{ProcessexecRuntime。getRuntime()。exec(sb。toString());if(exec。waitFor()0){log。info(数据库备份成功,保存路径:sqlPath);}else{System。out。println(process。waitFor()exec。waitFor());}}catch(IOExceptione){log。error(备份数据库出现IO异常,e);}catch(InterruptedExceptione){log。error(备份数据库出现线程中断异常,e);}catch(Exceptione){log。error(备份数据库出现其他异常,e);}}} 3。定时任务 packagecom。kevin。schedule;importcom。kevin。manager。BackUpDataBaseManager;importorg。slf4j。Logger;importorg。slf4j。LoggerFactory;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。scheduling。annotation。Scheduled;importorg。springframework。stereotype。Component;importjava。text。SimpleDateFormat;authordellversion:ScheduledTasks。javav1。0,2020年02月11日11:38Description定时任务ComponentpublicclassScheduledTasks{privatestaticfinalLoggerlogLoggerFactory。getLogger(ScheduledTasks。class);privatestaticfinalSimpleDateFormatdateFormatnewSimpleDateFormat(yyyyMMddHHmmssSS);AutowiredprivateBackUpDataBaseManagerbackUpDataBaseManager;每天下午4点50分30秒执行Scheduled(cron305016?)publicvoidreportCurrentTime(){StringformatdateFormat。format(System。currentTimeMillis());log。info(Thetimeisnow{},format);backUpDataBaseManager。exportSql(format);}} 4。启动类 packagecom。kevin;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;importorg。springframework。scheduling。annotation。EnableScheduling;authordellversion:TaskAppliacation。javav1。0,2020年02月11日12:12DescriptionSpringBootApplicationEnableSchedulingpublicclassTaskApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(TaskApplication。class);}} 5。执行: 启动程序: 执行结果(文件名前面为时间戳): sz命令下载 默认下载到下载目录 文件内容: 思路:使用 mysqldumpopthhostnameuserusernamepasswordpasswordresultfiledirfilenamedefaultcharactersetutf8dbname 命令 hostname:数据库所在主机 username:数据库连接用户名 password:数据库连接密码 resultfile:结果文件。指定目录文件名 dbname:需要导出的数据库名 如: mysqldumpopth192。168。100。120userkevinpasswordKevin123!resultfileexportserversdbbackup2020021216503001cloudpm。sqldefaultcharactersetutf8test01 注意事项: 网上有说加个锁表的参数lockalltablestrue 但报无reload权限,直接拿语句执行,也报相同的问题: mysqldump:CouldntexecuteFLUSHTABLES:Accessdenied;youneed(atleas) 通过grant进行授权也不行 直到看到 然后去掉了lockalltablestrue 就可以执行成功了