• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > c实现linux下的数据库备份

c实现linux下的数据库备份

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了linux数据库备份,linux备份数据库命令,linux下数据库备份,linux自动备份数据库,linux备份mysql数据库等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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); 
  }
   
}
</div>

2. db_list.txt

admin
book
</div>

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); 
  }
   
}
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c实现linux下的数据库备份

相关文章

  • 2017-05-28pthread_cond_wait() 用法深入分析
  • 2017-05-28基于C++ list中erase与remove函数的使用详解
  • 2022-04-30C语言rewind和fseek函数的用法详解(随机读写文件)
  • 2017-05-28C/C++位操作实例总结
  • 2017-05-28基于SVN源码服务器搭建(详细教程分析)
  • 2017-05-28C语言 经典题目螺旋矩阵 实例详解
  • 2017-05-28深入解析C++的循环链表与双向链表设计的API实现
  • 2017-05-28浅析C/C++中的可变参数与默认参数
  • 2017-05-28利用C++实现矩阵的相加/相称/转置/求鞍点
  • 2017-05-28C/C++ 宏详细解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 浅析int*p[ ]与int(*p)[ ]的区别
    • C++基于控制台实现的贪吃蛇小游戏
    • C++二分法在数组中查找关键字的方法
    • 详解桶排序算法的思路及C++编程中的代码实现
    • Linux网络编程之UDP Socket程序示例
    • C++ 字符串的反转五种方法实例
    • Linux环境g++编译GDAL动态库操作方法
    • 函数指针的一些概念详解
    • C++去除输入行中空白的方法
    • VC++中图像处理类CBitmap的用法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有