PDO实现mysql数据库数据库备份

$db_hostname="localhost"; $db_database="数据库名"; $db_username="root"; $db_password="xxx"; $DBH = new PDO("mysql:host=$db_hostname;dbname=$db_database; charset=utf8", $db_username, $db_password); //put table names you want backed up in this array. //leave empty to do all //要备份的表 //全备份置空 $tables = array(); backup_tables($DBH, $tables); function backup_tables($DBH, $tables) {     $DBH->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_NATURAL ); //Script Variables     $compression = false;     $BACKUP_PATH = "/data/www/backup/";     $nowtimename = time(); //create/open files  创建开启文件     if ($compression) {         $zp = gzopen($BACKUP_PATH.$nowtimename.'.sql.gz', "a9");     } else {         $handle = fopen($BACKUP_PATH.$nowtimename.'.sql','a+');     } //array of all database field types which just take numbers     $numtypes=array('tinyint','smallint','mediumint','int','bigint','float','double','decimal','real'); //get all of the tables     if(empty($tables)) {         $pstm1 = $DBH->query('SHOW TABLES');         while ($row = $pstm1->fetch(PDO::FETCH_NUM)) {             $tables[] = $row[0];         }     } else {         $tables = is_array($tables) ? $tables : explode(',',$tables);     } //cycle through the table(s)     foreach($tables as $table) {         $result = $DBH->query("SELECT * FROM $table");         $num_fields = $result->columnCount();         $num_rows = $result->rowCount();         $return=""; //uncomment below if you want 'DROP TABLE IF EXISTS' displayed //$return.= 'DROP TABLE IF EXISTS `'.$table.'`;'; //table structure         $pstm2 = $DBH->query("SHOW CREATE TABLE $table");         $row2 = $pstm2->fetch(PDO::FETCH_NUM);         $ifnotexists = str_replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS', $row2[1]);         $return.= "nn".$ifnotexists.";nn";         if ($compression) {             gzwrite($zp, $return);         } else {             fwrite($handle,$return);         }         $return = ""; //insert values         if ($num_rows){ … Read more

mysql开启慢查询日志

vi /etc/my.cnf 在 [mysqld] 下加入 slow_query_log = 1  #开启慢查询日志 slow_query_log_file = /var/log/mysql-slow.log  #指定日志存放地址,mysql5.5及之前版本 log-slow-queries long_query_time = 1  #设置多久视为慢查询 chown mysql:mysql -R /var/log/musql-slow.log 重启mysql 查看设置的变量 mysql> show variables like '%slow%'; +—————————+————————-+ | Variable_name             | Value                   | +—————————+————————-+ | log_slow_admin_statements | OFF                     | | log_slow_slave_statements | OFF                     | | slow_launch_time          | 2                       | | slow_query_log            | ON                      | | slow_query_log_file       | /var/log/mysql-slow.log | +—————————+————————-+ 5 rows in set (0.00 sec) mysql> show variables like 'long_query_time'; +—————–+———-+ | Variable_name   | Value    | +—————–+———-+ | long_query_time | 1.000000 | +—————–+———-+ 1 row in set (0.00 sec) 模拟查询 SELECT SLEEP(5); 查看mysql-slow.log文件 /usr/local/mysql/bin/mysqld, Version: 5.6.40-log (Source distribution). started with: Tcp port: 3306  Unix socket: /tmp/mysql.sock Time                 Id Command    Argument # Time: 181127 19:07:05 # User@Host: root[root] @ localhost []  Id:     1 # Query_time: 5.000253  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0 SET timestamp=1543316825; select sleep(5); 查询mysql连接数 mysql> SHOW status like 'Threads%'; +——————-+——-+ | Variable_name     | Value | +——————-+——-+ | Threads_cached    | 1     | | Threads_connected | 1     | | Threads_created   | 2     | | Threads_running   | 1     | +——————-+——-+ 4 rows in set (0.00 sec) 查询mysql配置最大连接数 mysql> show variables like 'max_connections'; +—————–+——-+ | Variable_name   | Value | +—————–+——-+ … Read more

Mysql批量删除相同前缀的表

今天上午想备份一下微擎的数据库哎,打开phpmyadmin一看好几百张表,有些表是之前安装的应用自带的,现在不用了,不想备份这谢谢表了,就想着批量把相同前缀的这些表删掉。这里只写具体方法: use information_schema; SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) AS statement FROM information_schema.tables WHERE table_schema = 'jiaozhou' AND table_name LIKE 'ims_mihua%'; 查询出来后,得到的statement语句形如下面这种格式: DROP TABLE ims_mihua_sq_account,ims_mihua_sq_address,ims_mihua_sq_admin,ims_mihua_sq_adv,ims_mihua_sq_area,ims_mihua_sq_balance,ims_mihua_sq_black,ims_mihua_sq_cart,ims_mihua_sq_cash,ims_mihua_sq_channel,ims_mihua_sq_chat,ims_mihua_sq_city,ims_mihua_sq_citys,ims_mihua_sq_collect,ims_mihua_sq_comment,ims_mihua_sq_discount,ims_mihua_sq_discount_record,ims_mihua_sq_fields,ims_mihua_sq_footmark,ims_mihua_sq_get_redpackage,ims_mihua_sq_goods,ims_mihua_sq_goods_cate,ims_mihua_sq_group,ims_mihua_sq_info,ims_mihua_sq_info_comment,ims_mihua_sq_infoorder,ims_mihua_sq_integral,ims_mihua_sq_member,ims_mihua_sq_msg,ims_mihua_sq_mstime,ims_mihua_sq_option,ims_mihua_sq_order,ims_mihua_sq_order_goods,ims_mihua_sq_order_record,ims_mihua_sq_param,ims_mihua_sq_qiandao,ims_mihua_sq_redmsg,ims_mihua_sq_redpackage,ims_mihua_sq_refund,ims_mihua_sq_ring,ims_mihua_sq_ring_zan,ims_mihua_sq_sensitiveword,ims_mihua_sq_share_history,ims_mihua_sq_shop,ims_mihua_sq_shop_admin,ims_mihua_sq_shop_apply,ims_mihua_sq_shop_cate,ims_mihua_sq_shop_cfg,ims_mi; 复制sql语句到phpmyadmin里面执行一下就ok了  2018.10.10补充 最近发现用group_concat 如果查询字段过长会出现查询数据展示不全的问题,原因是group_concat 有个默认长度配置  group_concat_max_len  用  show varialbes like 'group_concat_max_len' 可以查询该长度  默认是1024 那么解决方法就是改变这个配置咯   SET SESSION group_concat_max_len = 10240; or SET GLOBAL group_concat_max_len = 10240; 接下来在查询一下 : SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name SEPARATOR ' ') , ';' ) AS statement FROM information_schema.tables WHERE table_schema = 'wq' AND table_name LIKE 'ims_ewei%'; 完美~

Mysql报错:Invalid datetime format: 1292 Truncated incorrect DOUBLE value: 问题及解决办法

今天oauth登陆遇到个问题,第一次登陆没啥为题,第二次登陆mysql报错:Invalid datetime format: 1292 Truncated incorrect DOUBLE value: ‘xxxxxxxxx’ google一下原因表的字段‘openid’是varchar类型,oauth获取github accesstoken返回的是一个数字,解决方法就是把数字转换成字符串咯~    $openid.""

Mysql添加用户

#连接mysql mysql -u root -p #创建用户 create USER "adam"@"localhost" identified by '你的密码'; #查看用户列表 select CONCAT('User:',user,'@',host) from mysql.user; 输出 +——————————-+ | CONCAT('User:',user,'@',host) | +——————————-+ | User:adam@localhost           | | User:mysql.session@localhost  | | User:mysql.sys@localhost      | | User:root@localhost           | +——————————-+ 4 rows in set (0.00 sec) #分配权限   grant all privileges on wohuanicai.* to 'adam'@'localhost' identified by '你的密码';    #Over

Linux下Mysql每天自动备份数据库

#新建bash脚本文件 touch mysqlback.sh #编辑文件 vim mysqlback.sh #编写脚本 #!/bin/sh DB_USER="用户名" DB_PASS="密码" DB_HOST="localhost" DB_NAME="数据库名" BACK_DIR="/home/mysqlbackup" DATA=`date +%F` mysqldump –opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME | gzip  > $BACK_DIR/$DB_NAME_BACKUP_$DATA.sql.tar.gz 然后就是用crontab定时执行脚本文件  #进入编辑状态 crontab -e #计划每天凌晨3点1分执行  1 3 * * * /bin/bash /dir/mysqlback.sh