zoukankan      html  css  js  c++  java
  • MySQL使用dump备份以及恢复备份

    MySQL使用dump备份以及恢复备份

    项目中需要对mysql数据进行备份以及恢复。这里记录一个docker部署的mysql数据库用dump全量备份的案例。

    注意,用dump备份时,所有服务是停止的,避免备份时写入操作引起的数据问题。mysql镜像时latest版本,Server version: 8.0.27 MySQL Community Server - GPL

    所有数据库备份

    docker exec -it mysql mysqldump -uroot -p123 -A > all.sql
    

    -uroot指使用root用户;

    -p123指数据库密码是123;

    -A备份所有数据库,导出的sql包含了创建数据库的语句,详情见附录1;

    all.sql备份的文件名,此处文件备份到当前目录。

    执行结束后当前目录会有all.sql文件,可以使用cat all.sql查看里面的内容。

    恢复备份

    恢复备份命令如下:

    docker exec -i mysql mysql -uroot -p123 < all.sql
    

    注意1:这个命令不要-t,否则会报the input device is not a TTY

    注意2:高版本(据说2.5.0版本以后)会报mysql: [Warning] Using a password on the command line interface can be insecure.。不能在命令行写密码。

    详情查看官方文档6.1.2.1 End-User Guidelines for Password Security

    方法1:使用config_editor

    使用下面命令设置登录账号密码。

    #设置登录配置
    mysql_config_editor set --login-path=login --user=root --password
    #查看
    mysql_config_editor print --all
    ---
    [login]
    user = "root"
    password = *****
    ---
    #登录
    mysql --login-path=login
    

    此方法在容器内部是可以正常登录的,但在容器外部会报错。

    docker exec -it mysql mysql mysql --login-path=login
    #mysql: [ERROR] unknown variable 'login-path=login'.
    

    方法2:-p 不输入密码

    该方法是使用交互式提供密码。-p或者--password后不要输入密码,回车后命令行会出现交互输入方式。

    mysql -uroot -p
    

    此方法如果是用脚本程序执行的话,避免不了要输入密码。

    方法3:my.cnf配置账号密码

    /etc目录下有个my.conf文件,在该文件里配置账号密码。

    此方法测试有效。

    详情查看官方文档6.1.2.1 End-User Guidelines for Password Security

    镜像没有安装vim,我这里是把配置文件拷贝出来,改好再拷贝回去。

    # 从容器里拷贝回来
    docker cp mysql:/etc/mysql/my.conf ./
    # 编辑
    vi my.conf
    ---
    [client]
    host = localhost
    user = root
    password = '123'
    ---
    # 拷贝回容器
    docker cp ./my.conf mysql:/etc/mysql/
    # 备份
    docker exec -it mysql mysqldump --defaults-extra-file=/etc/mysql/my.cnf -A > ./all.sql
    # 恢复
    docker exec -i mysql mysql --defaults-extra-file=/etc/mysql/my.cnf < ./all.sql
    

    方法4:JDBC建立连接,Java方式备份

    利用JDBC连接,将备份脚本拷贝进容器,然后用jdbc执行source命令恢复备份。

    为了省去拷贝的步骤,最好在创建容器时将mysql容器的卷映射到宿主机器上(防止重新创建容器导致备份丢失)。

    敌人总是会在你最不想它出现的地方出现!
  • 相关阅读:
    Hibernate二 配置
    Hibernate学习笔记一 理解
    使用Oracle的logminer工具进行日志挖掘
    确定系统中的字节序是大端字节序还是小端字节序。
    linux下oracle对参数要求的解释
    SnapAssure备份恢复(从文件系统到ASM实例)
    oracle的增量检查点
    C# 的三种序列化方法
    C#引用C++的DLL时C#和C++的数据类型对照表
    asp.net通过基类实现统一脚本和样式的管理
  • 原文地址:https://www.cnblogs.com/longhx/p/15741141.html
Copyright © 2011-2022 走看看