c实现linux下的数据库备份

2025-05-27 0 86

Linux下c实现的数据库备份,只要修改数据库列表文件的信息即可。

db_list.txt把后缀去掉即可,一个数据库一行。

1. main.c

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113
#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

?

1

2
admin

book

3.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113
#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);

}

}

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 c实现linux下的数据库备份 https://www.kuaiidc.com/75466.html

相关文章

发表评论
暂无评论