c实现linux下的数据库备份
Linux下c实现的数据库备份,只要修改数据库列表文件的信息即可。
db_list.txt把后缀去掉即可,一个数据库一行。
1.main.c
#include<sys/types.h>
#include<sys/wait.h>
#include<ctype.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
//待备份的数据表文件(一个数据库一行)
#defineDB_FILE"./db_list"
//最多可以备份的数据库数量
#defineNUM20
//一个数据库名字的最长字符数
#defineLEN128
//保存从DB_FILE中读取到的数据库
char*db_list[NUM];
//从DB_FILE文件中读取到的数据库数量
intread_num;
//请求内存函数
voidmalloc_dblist();
//释放内存函数
voidfree_dblist();
//读取数据库文件
voidreadDbFile();
intmain(intargc,char*argv[]){
pid_tpid;
inti;
charbuf[LEN];
//从文件读取数据库信息
readDbFile();
pid=fork();
if(pid<0){
fprintf(stderr,"forkerror\n");
exit(1);
}
switch(pid){
case-1:
fprintf(stderr,"forkfailed\n");
exit(1);
case0:
//子进程进行数据库的备份
for(i=0;i<read_num;i++){
memset(buf,'\0',LEN);
sprintf(buf,"%s%s%s%s%s","mysqldump-uroot",db_list[i],">",db_list[i],".sql");
system(buf);
printf("%d,%s\n",i,buf);
}
break;
}
//等待子进程的结束
if(pid>0){
intstat_val;
pid_tchild_pid;
child_pid=wait(&stat_val);
if(!WIFEXITED(stat_val)){
fprintf(stdout,"Childterminatedabnormaly\n");
}
exit(1);
}
free_dblist();
exit(0);
}
voidmalloc_dblist()
{
inti=0;
//mallocfordb_list
for(i=0;i<NUM;i++){
db_list[i]=malloc(LEN);
memset(db_list[i],'\0',LEN);
}
}
voidfree_dblist()
{
inti;
//freedb_list'smemory
for(i=0;i<NUM;i++){
free(db_list[i]);
}
}
voidreadDbFile()
{
FILE*fp;
fp=fopen(DB_FILE,"r");
if(!fp){
fprintf(stderr,"%snotfound\n",DB_FILE);
}
else{
malloc_dblist();
read_num=0;
while(fscanf(fp,"%127[^\r\n]\n",db_list[read_num])==1){
puts(db_list[read_num]);
read_num++;
}
fclose(fp);
}
}
2.db_list.txt
admin book
3.
#include<sys/types.h>
#include<sys/wait.h>
#include<ctype.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
//待备份的数据表文件(一个数据库一行)
#defineDB_FILE"./db_list"
//最多可以备份的数据库数量
#defineNUM20
//一个数据库名字的最长字符数
#defineLEN128
//保存从DB_FILE中读取到的数据库
char*db_list[NUM];
//从DB_FILE文件中读取到的数据库数量
intread_num;
//请求内存函数
voidmalloc_dblist();
//释放内存函数
voidfree_dblist();
//读取数据库文件
voidreadDbFile();
intmain(intargc,char*argv[]){
pid_tpid;
inti;
charbuf[LEN];
//从文件读取数据库信息
readDbFile();
pid=fork();
if(pid<0){
fprintf(stderr,"forkerror\n");
exit(1);
}
switch(pid){
case-1:
fprintf(stderr,"forkfailed\n");
exit(1);
case0:
//子进程进行数据库的备份
for(i=0;i<read_num;i++){
memset(buf,'\0',LEN);
sprintf(buf,"%s%s%s%s%s","mysqldump-uroot",db_list[i],">",db_list[i],".sql");
system(buf);
printf("%d,%s\n",i,buf);
}
break;
}
//等待子进程的结束
if(pid>0){
intstat_val;
pid_tchild_pid;
child_pid=wait(&stat_val);
if(!WIFEXITED(stat_val)){
fprintf(stdout,"Childterminatedabnormaly\n");
}
exit(1);
}
free_dblist();
exit(0);
}
voidmalloc_dblist()
{
inti=0;
//mallocfordb_list
for(i=0;i<NUM;i++){
db_list[i]=malloc(LEN);
memset(db_list[i],'\0',LEN);
}
}
voidfree_dblist()
{
inti;
//freedb_list'smemory
for(i=0;i<NUM;i++){
free(db_list[i]);
}
}
voidreadDbFile()
{
FILE*fp;
fp=fopen(DB_FILE,"r");
if(!fp){
fprintf(stderr,"%snotfound\n",DB_FILE);
}
else{
malloc_dblist();
read_num=0;
while(fscanf(fp,"%127[^\r\n]\n",db_list[read_num])==1){
puts(db_list[read_num]);
read_num++;
}
fclose(fp);
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。