mysql 導出導入數據庫(Mysqldump)備份


  1. 使用mysql不熟練啊!!!
  2. mysqldump導出數據庫,必須以cmd命令行的形式,在Navicat中以新建查詢形式使用Mysqldump不好使的。(本來使用Navicat轉儲SQL,再導入SQL,但是報錯,半天沒解決鬧心,決定使用Mysqldump)
  3. Mysqldump在cmd中導出數據庫,有一點必須要注意,就是不能登錄mysql,如果使用mysql -h 47.94.88.36 -u root -p登錄了。那么再使用mysqldump -h 47.94.88.36 -u root -p dbname tablename > db.sql導出數據表結構和數據會提示你加分號,加了分號之后會報錯(我覺得和分號無關,主要是因為登錄了吧?)。意思就是不能登錄,要在未登錄的狀態下使用mysqldump -h 47.94.88.36 -u root -p dbname tablename > db.sql 命令,然后提示輸入密碼,就能夠成功導出數據了。而且在使用此命令的時候,后面不能加 ;。
  4. 備份
    1. 備份整個數據庫:
      mysqldump -uroot -proot --lock-all-tables --databases emotional_course > e:/project/SQLBackUp/course.sql       #emotional_course   是數據庫名
      # 導出一個數據庫, 注意選項參數 --databases 這里, 不要使用--database官方不推薦使用,而且以后的版本可能會移除.(會有一個warning)
      mysqldump -uroot -proot emotional_course > e:/project/SQLBackUp/course.sql #區別是上面的會鎖表(全局讀鎖),並且在SQL文件的第一行會創建數據庫, 這條語句不會再SQL文件中創建數據庫

      --lock-all-tables: 在mysqldump導出的整個過程中以read方式鎖住所有表, information_schema(不會導出)performance_schema(不會導出)指定--lock-all-tables參數,那么從一開始就對整個mysql實例加global read lock鎖。這整個全局讀鎖會一直持續到導出結束。導出的數據庫在數據一致性上是被嚴格保證的,也就是數據是一致性的。
      在備份的時候, 備份數據會上鎖(寫鎖).

    2. 備份某個表:
      mysqldump -uroot -proot emotional_course user > e:/project/SQLBackUp/course_user.sql    #備份一個表
      mysqldump -uroot -proot emotional_course user course > e:/project/SQLBackUp/userandcourse.sql     #備份多個表, 注意表名與表名之間是空格, 不要加標點符號(備份user表和course表)

       

    3. 備份多個數據庫:
      mysqldump -uroot -proot --databases emotional_course bbb_cxk > e:/project/SQLBackUp/userandcourse.sql          #需要注意的點和上面的一樣,庫名和庫名之間只有空格,  還需要注意一點, 就是第一次備份數據庫到a.sql文件, 
      如果第二次備份還是a.sql文件, 那么會覆蓋掉之前的備份, 需要特別注意的.

       

    4. 備份全部數據庫
      mysqldump -uroot -proot --all-databases > e:/project/SQLBackUp/userandcourse.sql      # 輸入這個命令后會報錯,提示信息如下:
      -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
      因為mysqldump默認是不備份事件表的,只有加了--events 才會解決,加上--events --ignore-table=mysql.events參數即可.
      mysqldump -uroot -proot --events --ignore-table=mysql.events --all-databases > e:/project/SQLBackUp/userandcourse.sql

       mysql數據庫(系統自帶的)會被備份, information_schema  和 performance_schema  兩個數據庫不會被備份.

    5. 編寫shell腳本執行mysql備份
      #!/bin/bash
      number=30  #保留30天的備份文件
      backup_dir=/home/bneglect/SQLBackup  #保存備份文件的目錄
      backup_date=`date +%Y%m%d%H%M%S`  #備份時間
      username=root  #數據庫用戶
      password=root  #數據庫密碼
      db_name=fortune  #數據庫名
      if [ ! -d $backup_dir ]
      then
          mkdir -p $backup_dir;
      fi
      #  判斷目錄是否存在, 不存在則創建
      mysqldump -u$username -p$password $db_name > 
       $backup_dir/$db_name-$backup_date.sql  #備份的目錄及文件名
      echo "create $backup_dir/$db_name-$backup_date.sql" >> $backup_dir/backup.log  #備份的日志
      count=`ls -l -crt $backup_dir/*.sql | awk '{print $9}' | wc -l`  #統計目錄下的SQL文件個數
      delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9}' | head -1` #第一個文件.SQL文件
      if [ $count -gt $number ]
      then
          rm -f $deffile
          echo "delete $delfile" >> $backup_dir/backup.log
      fi
      #  刪除最早的備份文件, 一直保留30天的即可

       使用-ppassword會報一個warning, 提示在命令行下輸入密碼不安全, 其實就是想要用戶Mysqldump 回車之后輸入密碼, 因為命令行下輸入密碼會暴露明文密碼的. 不過不影響備份的. 如果不想報這個warning, 可以去配置mysqld.cnf 配置文件.

    6. 編輯定時任務, 讓shell腳本自動執行備份數據庫. 
      crontab -e 編輯計划任務, 第一次會選擇文本模式, 選擇3(vim.basic)即可. 
      30 2 * * * /home/bneglect/bneglect_test/mysqlBackUp.sh

      保存退出, OK了.有的服務器直接wq就可以保存退出. 有的按照------> crontab編輯文件后保存方式  Ctrl+o, 出現"file name to write.."然后回車, 然后Ctrl+x  顯示"crontab: installing new crontab"成功(Ubuntu系統)

    7. 注意如果計划任務不執行, 一般從4各方面着手排查
      1. cron服務是否啟動(Ubuntu上是cron, 有的系統是crond) service cron status 或 systemctl status cron 查看服務狀態 service cron start 或 systemctl start cron 啟動 
      2. shell腳本是否有語法錯誤, 可以手動執行shell腳本, 如果成功執行, 就是別的原因
      3. shell腳本的路徑要寫成絕對路徑,不能使用相對路徑.
      4. 創建計划任務的用戶沒有執行shell腳本的權限, 舉例: bneglect創建的計划任務, 但是mysqlBackUp.sh 的屬主和屬組可能是root(反正不是bneglect), 解決辦法: (1)添加bneglect到root屬組(2)修改權限為777(3)屬主改成bneglect, 不過一般都是改 777


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM