标签归档:mysql

异地备份

原来咨询过阿里云的客服,说是每天磁盘都有镜像,我也能看到镜像,所以本来是不考虑再做异地备份了,相信阿里云,相信政府。但有一个瞬间,我觉得异地备份不是一件麻烦的事情,于是今天就做了如下操作

备份

利用现有的条件做备份

  1. 服务器默认安装了SVN,不用白不用
  2. 我默认有SVN服务器,不用白不用
  3. 我需要做的只是使用mysqldump导入wordpress数据库,利用cp拷贝出uploads目录
  4. 然后再svn commit一下,就可以每天生成一个版本

这样做的好处

  • 显而易见,这样做两台服务器都不需要额外安装任何工具,只需要新建一个仓库写一个脚本就完事了,如何腾不出这点时间呢
  • SVN做的是差异备份,这样做比每天一个目录更省空间,你尽可以每天提交一个版本

具体操作

  1. 新建SVN仓库,假设叫backup
  2. svn checkout https://svn.server/backup
  3. 配置/etc/my.cnf,将mysql的用户名密码写到[mysqldump]下
  4. 执行mysqldump wordpress > backup/wordpress.sql
  5. 执行yes|cp -r /path/to/wordpress/wp-content/uploads/ backup/
  6. cd /path/to/backup
  7. svn commit -m “date +”%Y-%m-%d”
  8. crontab -e
  9. 增加一行0 1 * * * /bin/sh /root/backup.sh

这样,每天在凌晨1点的时候,会自动备份数据库和附件的目录到SVN服务器

资源下载

backup.sh下载

恢复Mysql数据

今天由于误操作,需要更换操作系统,然而Mysql的数据并没有做定期的备份,只能拿到数据库原始的格式,需要恢复,大概需要以下几步:

  1. 找到Mysql的data目录
  2. 将wordpress目录(是你要恢复的目录)和ibdata1两个文件拷贝出来
  3. 安装跟原来数据相同版本的Mysql
  4. 将上述两个文件拷贝到新数据库的data目录下
  5. 删除新数据库的ib_logfile0和ib_logfile1两个文件
  6. 重启新数据库
  7. 使用客户端或mysqldump备份数据库成wordpress.sql

恢复有点麻烦,新装的数据也只是用来恢复,并不能正式使用,正式使用最好还是将备份出来的wordpress.sql恢复的一个新的数据库;所以还是要做好定时备份的工作,以防硬盘都坏掉的情况发生

备份方法

backup.bat

@echooff
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"  
c:\path\to\mysqldump wordpress > d:\path\to\dmp\wordpress_%Ymd%.sql  

my.ini设置

[mysqldump]  
user=root  
password=password  

MySql悬案,井号(#)和分号(;)造成的问题

来源:http://blog.tohours.com/2013/05/mysql.html

以下两个简单的insert语句,每一个单独执行都能成功,但按如下的顺序写到Navicat 8 for MySql中执行,第一句插入成功,第二句报如下错误:

[Err] 1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”’ at line 6

INSERT INTO manufacturer
  (manu_id,
   intro)
VALUES
  (130,
   ‘
#
‘);
INSERT INTO manufacturer
  (manu_id,
   intro)
VALUES
  (147,
   ‘;’);

要满足的条件:

  1. 带#的那句在前面
  2. #在一个新行的开始位置
  3. 后面一句中必须要有;出现
一个不满足都能执行成功,但实在想不明白中间的蹊跷……

codeigniter mysql php相关总结

开发lcwy这个项目,项目地址:http://lcwy.tohours.com,学习了不少php相关知识,做了如下总结:

  1. <?php require_once(“application/views/script/split_page.php”);?> 引用相关php文件
  2. 先$sql = $sql.” order by t.insert_time desc”; 后$sql = $sql.” limit “.$offset.”,”.$limit;
  3. mysql的 $offset 从0开始
  4. $this -> input -> cookie();可以取得相应的cookie
  5. foreach($_POST as $key => $value) 数组的遍历方法
  6. 查询方法 $this -> db -> where(array(“condition” => “value”)) -> order_by() -> get(“table_name”) -> result(); 取得对象的数组
  7. 也可使用 -> row()方法取得第一行的数据 (替换-> get() –> result())
  8. 也可使用 -> count_all_results()计算数据的条数,而不得到数据 (替换-> get() –> result())
  9. sql查询方法 $this -> db -> query($sql, $param) -> result();后面能接的方法与上面相同
  10. 更新方法$this -> db -> where(“id”, $id) -> update(“user”,$user);
  11. 字符串替换方法 str_replace(“world”,”earth”,”Hello world!”); //Hello earth!
  12. 正则替换方法 preg_replace(“/^[0-9]{4}/”, “”, $year); 其中正则也是以/开头和结尾
  13. 计算数据长度使用count(数组名称)
  14. 数字转字符 字符转数字函数 echo chr(65);echo ord(“B”);
  15. echo strpos(“Hello world!”,”wo”)
  16. 输出$this -> output -> set_output(encode_json($json));
  17. explode(“,”, $ids); split功能
  18. $data[“clear_time”] = null;//将数据库时间置空
  19. date_default_timezone_set(‘PRC’);在使用time时预先设置