您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java中怎么備份和還原MySQL數據庫,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
備份
上面的網頁提到mysqldump命令一共有三種形式,如下:
shell> mysqldump [options] db_name [tbl_name ...] shell> mysqldump [options] --databases db_name ... shell> mysqldump [options] --all-databases
該命令有很多的options,詳情可以查看上面的鏈接,我這里只需要備份一個數據庫,命令也比較簡單;如果在命令行窗口可以使用如下命令來實現備份:
mysqldump -umysql -pmysql --add-drop-database --skip-lock-tables -B tjfinal > d:/backup.sql
如果不加--add-drop-database參數并且用戶不是root用戶,有可能報下面的錯誤:
mysqldump: Got error: 1044: "Access denied for user 'mysql'@'localhost' to datab ase 'tjfinal'" when using LOCK TABLES
Java示例代碼:
/** * 備份數據庫 * @throws Exception */ public static void backup () throws Exception { String savePath = BACKUP_DIR + "backup-" + DateTimeTool.getDateByTime() + ".sql"; String[] execCMD = new String[] {"mysqldump", "-u" + DB_USER, "-p" + DB_PWD, DB_NAME, "-r" + savePath, "--skip-lock-tables"}; Process process = Runtime.getRuntime().exec(execCMD); int processComplete = process.waitFor(); if (processComplete == 0) { System.out.println("備份成功."); } else { throw new RuntimeException("備份數據庫失敗."); } }
還原數據庫需要用到MySQL的source命令,該命令用來讀取一個文件并執行其中的SQL語句;如果使用命令行工具,可以登錄MySQL客戶端,然后直接執行source命令即可:
MariaDB [tjfinal]> source file_name -- 或者 MariaDB [tjfinal]> \. file_name
當然如果不登錄進客戶端也是可以的,這時就需要用到mysql客戶端命令的 --execute(或者-e)選項(option),如下:
--execute=statement -- 或者 -e statement
其中--execute(或-e)選項表示要登錄客戶端然后執行SQL命令后退出,而該選項的參數 statement 就是要執行的SQL命令,關于mysql命令選項的說明可以參考這里:http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html#option_mysql_execute
因此在不登錄MySQL客戶端的情況下可以使用下面的命令還原數據庫:
mysql -umysql -pmysql -e source d:/backup.sql -- 或者 mysql -umysql -pmysql --execute="source d:/backup.sql"
Java示例代碼:
/** * 還原數據庫 * @param sql 要還的SQL文件 * @throws Exception */ public static void restore (String sql) throws Exception { String targetFile = BACKUP_DIR + sql; // SQL文件路徑 String[] execCMD = new String[]{"mysql", DB_NAME, "-u" + DB_USER, "-p" + DB_PWD, "-e source", targetFile}; Process process = Runtime.getRuntime().exec(execCMD); int processComplete = process.waitFor(); if (processComplete == 0) { System.out.println("還原成功."); } else { throw new RuntimeException("還原數據庫失敗."); }
關于Java中怎么備份和還原MySQL數據庫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。