首页 > 编程 > C > 正文

c实现linux下的数据库备份

2020-01-26 15:02:00
字体:
来源:转载
供稿:网友

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> //待备份的数据表文件(一个数据库一行)#define DB_FILE "./db_list"//最多可以备份的数据库数量#define NUM 20//一个数据库名字的最长字符数#define LEN 128//保存从DB_FILE中读取到的数据库char *db_list[NUM];//从DB_FILE文件中读取到的数据库数量int read_num;//请求内存函数void malloc_dblist();//释放内存函数void free_dblist();//读取数据库文件void readDbFile(); int main(int argc, char *argv[]) {  pid_t pid;  int i;  char buf[LEN];   //从文件读取数据库信息  readDbFile();     pid = fork();   if (pid < 0) {    fprintf(stderr, "fork error/n");    exit(1);  }     switch (pid) {    case -1:      fprintf(stderr, "fork failed/n");      exit(1);    case 0:      //子进程进行数据库的备份      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) {    int stat_val;    pid_t child_pid;         child_pid = wait(&stat_val);         if (!WIFEXITED(stat_val)) {      fprintf(stdout, "Child terminated abnormaly/n");    }    exit(1);       }     free_dblist();     exit(0);   } void malloc_dblist(){  int i = 0;  //malloc for db_list  for (i = 0; i < NUM; i++) {    db_list[i] = malloc(LEN);    memset(db_list[i], '/0', LEN);  }}void free_dblist(){  int i;  //free db_list's memory  for (i = 0; i < NUM; i++) {    free(db_list[i]);  }} void readDbFile(){  FILE *fp;     fp = fopen(DB_FILE, "r");  if (!fp) {    fprintf(stderr, "%s not found/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

adminbook

3.

#include<sys/types.h>#include<sys/wait.h>#include<ctype.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<stdio.h> //待备份的数据表文件(一个数据库一行)#define DB_FILE "./db_list"//最多可以备份的数据库数量#define NUM 20//一个数据库名字的最长字符数#define LEN 128//保存从DB_FILE中读取到的数据库char *db_list[NUM];//从DB_FILE文件中读取到的数据库数量int read_num;//请求内存函数void malloc_dblist();//释放内存函数void free_dblist();//读取数据库文件void readDbFile(); int main(int argc, char *argv[]) {  pid_t pid;  int i;  char buf[LEN];   //从文件读取数据库信息  readDbFile();     pid = fork();   if (pid < 0) {    fprintf(stderr, "fork error/n");    exit(1);  }     switch (pid) {    case -1:      fprintf(stderr, "fork failed/n");      exit(1);    case 0:      //子进程进行数据库的备份      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) {    int stat_val;    pid_t child_pid;         child_pid = wait(&stat_val);         if (!WIFEXITED(stat_val)) {      fprintf(stdout, "Child terminated abnormaly/n");    }    exit(1);       }     free_dblist();     exit(0);   } void malloc_dblist(){  int i = 0;  //malloc for db_list  for (i = 0; i < NUM; i++) {    db_list[i] = malloc(LEN);    memset(db_list[i], '/0', LEN);  }}void free_dblist(){  int i;  //free db_list's memory  for (i = 0; i < NUM; i++) {    free(db_list[i]);  }} void readDbFile(){  FILE *fp;     fp = fopen(DB_FILE, "r");  if (!fp) {    fprintf(stderr, "%s not found/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);   }   }

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选