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脚本自动执行备份数据库. 

转载于:https://www.cnblogs.com/bneglect/p/11312448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值