急!C++ 备份mySQL数据库!请各位大侠指点,小女感激不尽!
我使用了如下脚本通过mysqldump备份数据库:
cd D:\Program Files\mysql-5.2.3\bin
mysqldump -uroot -p123 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x xysrlmpdb >d:\xysrlmpdb.sql
但由于路径有限制,每台电脑上的MYSQL安装路径不一样,所以,如果在程序里写代码备份,必须每次都要根据写文件,比较麻烦,不知道有没有别的办法可以让mysqldump执行起来,且能通过C++程序里将执行的参数传进去达到备份的目的。
我用过CreateProcess()来调用mysqldump数据库,但是传参过程中,程序识别不到“>”操作符,用转义“\”也识别不到,如果将“>”操作符后面的备份输出文件去了,则可以备份到屏幕,代码如下:(程序里的参数识别不到“>”操作符)
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(STARTUPINFO));
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW;
//得到工程目录下的TXT文件
char szFilePath[MAX_PATH];
GetModuleFileName(NULL, szFilePath, MAX_PATH - 1);
std::string strFilePath = szFilePath;
int nPos = strFilePath.rfind('\\');
if(nPos == -1) return -1;
strFilePath = strFilePath.substr(0, nPos+1);
strFilePath += "test.txt";
////
char szCmd[MAX_PATH + 201];
_snprintf(szCmd, MAX_PATH + 200, "NotePad.exe %s", strFilePath.c_str());
std::cout << "创建进程命令行:" << szCmd << std::endl;
BOOL bSucceed = CreateProcess(NULL, "\"D:\\Program Files\\mysql-5.2.3\\bin\\mysqldump.exe\"mysqldump -uroot -p123 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x xysrlmpdb>d:\xysrlmpdb.sql ", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if(bSucceed)
std::cout << "创建进程成功" << std::endl;
else
std::cout << "创建进程失败" << std::endl;