zoukankan      html  css  js  c++  java
  • PHP执行数据库定时备份 和手动还原

    一 备份数据库

    我的这个是在TP5上,其实不在TP5也可以

    逻辑:

    1 首先在自己电脑的cmd命令上测试备份数据库,成功才能往下进行所以得到

    C:/luanxiede/mysql-5.7/bin/mysql.exe shujiku > "C:/shujiku_0908.sql"

    注:这里没用到用户名和密码是因为在本机上就可以省略.参考:

    https://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html  在mysql的目录下建立my.cnf :

    [client]
    user = root
    password = root
    host = 127.0.0.1
    
    [test]
    user = root
    password = root
    host = www.test.com

    2.1方式一 然后将该语句放在网站根目录外sqlbackup.bat中

    C:/luanxiede/mysql-5.7/bin/mysql.exe shujiku > "C:/www/test/sql/shujiku_0908.sql"

    2.2 建立定时任务执行sqlbackup.bat文件

    3.1 方式二 .(我的是在TP5中)首先在application/extra/ 目录下建立一个配置文件,我起的名字是base.php

    <?php
    
    return [
       // 数据库备份文件存放位置
    'sql_backup_path' => APP_PATH . 'backup/', ];

    3.2 在Test.php控制器中写个方法

    /**
         * 备份数据库
         */
        public function backup() {
            $dbConfig = require(APP_PATH . 'database.php');
            $filename = config('base.sql_backup_path') . $dbConfig['database'] . '-' .date('YmdHis',time()) . '.sql';
            system( $dbConfig['exec_bin_dir'] ."mysqldump.exe -u" . $dbConfig['username'] . " -p" . $dbConfig['password'] . " " . $dbConfig['database'] . " > "". $filename .""",$return);
            if($return === 0) {
                $this->success('备份成功:' . $filename);
            } else {
                $this->error('备份失败');
            }
        }

    3.3 还原数据库方法

    /**
         * 还原sql文件
         */
        public function importSqlFile() {
            $file = input('?get.file') ? input('get.file') : false;
            $trueFile = config('base.sql_backup_path') . $file;
            if(!file_exists($trueFile)) {
                $this->error('文件不存在');exit;
            }
            
            $dbConfig = require(APP_PATH . 'database.php');
            system($dbConfig['exec_bin_dir'] . "mysql.exe -u" . $dbConfig['username'] . " -p" . $dbConfig['password'] . " -h " . $dbConfig['hostname'] . " -P" . $dbConfig['hostport'] . " " . $dbConfig['database'] . "<" . $trueFile,$return);
            if($return === 0) {
                $this->success('还原成功');
            } else {
                $this->error('还原失败');
            }
        }

    4.1 方式三 和方式三类似,只不过是变成自定义命令形式 建立SalBackup.php文件:

    <?php
    
    namespace appcommoncommand;
    
    use thinkconsoleCommand;
    use thinkconsoleInput;
    use thinkconsoleOutput;
    
    class SqlBackup extends Command
    {
        protected function configure()
        {
            $this->setName('sqlbackup')->setDescription('database: backup');
        }
    
        protected function execute(Input $input, Output $output)
        {
            // 备份数据库
            $dbConfig = require(APP_PATH . 'database.php');
            $filename = config('base.sql_backup_path') . $dbConfig['database'] . '-' .date('YmdHis',time()) . '.sql';
            $commond = $dbConfig['exec_bin_dir'] . "mysqldump.exe " . $dbConfig['database'] . " > "". $filename .""";
            exec($commond);
        }
    
    }

    4.2 在application/command.php文件中写

    <?php
    
    return [
        'appcommoncommandSqlBackup'
    ];

    4.3 在网站根目录建立sqlbackup.bat文件

    C:
    cd C:homewww est C:homeserverphp
    -7.0.1php.exe think sqlbackup

    4.4 建立定时任务执行该.bat文件 我的是每晚2:30

    二 还原数据库

    D:/server/mysql-5.7/bin/mysql.exe -uroot -proot -h 127.0.0.1 -P 3306 test< D:/wamp/test/application/backup/test-20191111113922.sql
  • 相关阅读:
    mysql 表的类型
    【Mysql优化】key和index区别
    [置顶] 步步辨析JS中的对象成员
    [置顶] C语言单元测试框架
    代码规范总结
    AFNetworking、MKNetworkKit和ASIHTTPRequest对比
    在SQL中使用PL/SQL函数存在的问题
    C++中一个函数隐藏的有趣例子
    深入浅出Mybatis-分页
    SRM 207 Div II Level Two: RegularSeason,字符串操作(sstream),多关键字排序(操作符重载)
  • 原文地址:https://www.cnblogs.com/init-007/p/11358422.html
Copyright © 2011-2022 走看看