MySQL备份、迁移及开放远程访问3306端口备忘

今天把数据服务器和业务服务器进行了分离,其中涉及对MySQL开放远程访问的,作出记录如下以供备忘:

假设数据服务器IP地址为192.168.1.101,业务服务器IP地址为192.168.2.51

首先在数据服务器192.168.1.101上安装好MySQL实例,然后使用root访问MySQL并建立好所需要的数据库和用户。

$ mysql -uroot -p
Enter Password:
 
> CREATE DATABASE business_db;
> GRANT ALL PRIVILEGES ON `business_db`.* TO 'business'@'192.168.2.51' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
> FLUSH PRIVILEGES;

继续阅读

MySQL TIMESTAMP column with CURRENT_TIMESTAMP

在部署程序时遇到的一个问题,MySQL定义举例如下:

CREATE TABLE `example` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

这段SQL是我从项目中摘取出来的,在测试机器上一切正常,但是部署到生产机器上MySQL报错:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.

继续阅读

Debian完全卸载清理并重新安装MySQL服务器

之前服务器上配置测试用的服务环境,我偷懒顺手用网上现成的脚本进行安装,结果MySQL启动不了,于是我只有老老实实的重新安装MySQL Server,原本以为apt-get --purge这类命令可以很好的帮我解决这个问题,于是我通过下面的命令重新安装:

sudo apt-get --purge remove mysql-server
sudo apt-get install mysql-server

然后再一次的启动MySQL,仍然失败报错,搜索网络依旧是提示重新安装MySQL服务程序,看样子是上面卸载命令不能很好的清理安装残余,最后找到这么一篇文章《MySQL Problems – a complete reinstall》。找到了完全清理卸载干净MySQL的办法,记录在这里供备忘。

继续阅读

服务器迁移重新配置Web服务的一些细节备忘

之前配置Linux服务器时采用的是Debian系统一直很稳定,这次准备迁移到新的服务器环境上,好在以前的配置我在博客都做了备忘,所以很容易就搞定了,这次服务系统采用的是最新的Debian 7.0,但是有几个细节的忽略导致我折腾了一番,我再这里再做个记录吧:

首先要安装编译环境,虽然我们通过apt-get可以方便的绕过手动编译的环节,但是一些程序包可能内置编译命令,可以编译一些扩展程序,如果不安装编译环境,这些扩展程序将失效。通常通过下面的命令直接安装开发编译套件:

apt-get install build-essential

由于部分app是用Python开发的,而其所依赖的包包含可以提高性能的扩展,但是在编译时出现下面的错误:

src/XXX.c:31:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1

继续阅读

Debian下使用apt-get安装 Nginx + MySQL + PHPMyAdmin 备忘

首先添加必要的apt源,并使用下面的命令使服务器保持最新:

apt-get update
apt-get upgrade

假设服务器没有配置Web服务和MySQL数据库,首先安装Web服务,这里首选Nginx:

apt-get install nginx

其次安装MySQL数据库,尝试使用下面的命令(其间可能需要交互输入密码):

apt-get install mysql-server

接下来简单介绍一下PHP的安装,这里使用FastCGI模式,仍然使用apt-get命令,配置来至lowendscript,其中部分配置对于小内存VPS进行了优化,建议按要求修改,例如PHP_FCGI_CHILDREN和PHP_FCGI_MAX_REQUESTS等参数值:

继续阅读

博客基本恢复运行

今天早上的MySQL的崩溃让我下定决心要升级老旧的MySQL,哪知道遇到了一堆麻烦的事情,也让我感到服务器升级前一定要慎重再慎重的重要性。

首先就是MySQL就够我折腾的了,升级到5.5版本,本来以为只需要apt-get install就可以解决的问题,但是出现了杯具的错误,首先是Unable to set password for the MYSQL root…This may happened because the account already has a password…subprocess installed post-installation script return error exit。然后mysqld守护进程启动失败!于是想是不是MySQL 5.1没有卸载干净?本来是想直接从5.1升级的,结果死活升级不了,于是使用apt-get dist-upgrade,但是提示需要REMOVE mysql-server,下定决心后按下y回车,然后老旧的MySQL华丽丽的被卸掉了。好了,后来我采取下面两句罗列并删除所有和mysql有关的package:

dpkg --get-selections | grep 'mysql-' | awk '{print $1}'
# purge表示清除配置文件,也就是彻底删除
apt-get purge package1 package2 ...

继续阅读

本站MySQL数据库崩溃正在尝试恢复

MySQL意外崩溃,所有的页面均出现404无法访问的问题,后台无法登录,出现绿色背景以及Updating SEO configuration options in database(猜测是All In One SEO插件问题)。通过myisamchk -r检测数据库,并且通过invoke-rc.d mysql restart重启数据库服务基本解决问题,可惜后台登录不上出现:“您没有足够的权限访问该页面。”的错误消息。检查WordPress后台登录的数据库表wp_users以及wp_usermeta,发现其中表wp_usermeta提示“’wp_usermeta’ is marked as crashed and should be repaired”,看来wp_usermeta表损坏了,通过REPAIR TABLE命令处理过,然后后台登录正常。检查数据,发现丢失了一条评论,应该是Just_fly同学的评论,在此表示抱歉了。后来翻了一下自动备份文件夹,找到一份几个小时前的备份,立即恢复,丢失的评论也被找到了。

目前还在做扫尾工作,查看了MySQL的所有日志,竟然没有找到任何有效信息,由于这次崩溃导致WordPress出现诡异的找不到数据404错误,而不是连接不到数据库503错误,所以外部监控网站没有能够及时捕获这次故障时间,我是临近中午才发现问题的。好了,看来准备把这个老旧的MySQL数据库升级一下了,之前还考虑这个运行蛮稳定的就不升级了,看来不升级不行哎。

这是第200篇文章,没想到出现这样的问题,也算是个纪念吧,经常备份是个好习惯哦。

Linux/VPS下定时通过电子邮件(Email)发送文件及MySQL数据库备份

最近Linux搞得比较多,之前有个精简版的VPS服务器,今天又拿过来测试,主要是定期为上面的网站做个备份,大概看了一下,需要备份的分别有两个地方:1. 网站的主目录;2. MySQL数据库。于是想搞个定时发送备份文件到指定邮箱的做法。Linux刚上手,也不是很熟练,参考了一些命令,以及前辈们的备份做法,硬着头皮写了Bash Shell脚本,初步测试下来基本满足了要求,在这里分享给大家参考,不过建议大家使用前在实验环境下测试确保正常,如果因为潜在问题造成损失我可不负责哦:-)当然对于我这种新手而言,这样的脚本难免会有Bug,希望高手不吝指出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
 
# Author: wangye
# For more information please visit:
# //wangye.org/
# 请在使用本脚本前做好测试工作,脚本功能仅供参考,
# 对于可能的潜在问题造成损失,本人不承担责任。
 
MYSQL_USERNAME="mysql-username"
MYSQL_PASSWORD="mysql-password"
 
# 下面这行指示接收备份文件的电子邮件地址
BACKUP_RECEVIER="email-address-recive-backup@example.com"
BACKUP_FILENAME="/var/sample-site" # 需要备份的目录
BACKUP_DBNAME="sample" # 需要备份的数据库名称
BACKUP_PREFIX="backup_" # 备份文件的前缀
 
# 下面一些命令路径可以通过whereis获取
MYSQLDUMP_PATH="/usr/bin" # mysqldump 命令所在的路径
TARCOMPRESSOR_PATH="/bin" # tar 命令所在的路径
RM_PATH="/bin" # rm 命令所在的路径
MUTTMAIL_PATH="/usr/bin" # mutt 命令所在的路径
TEMP_PATH="/tmp" # 临时目录
 
# 产生临时名称形如 backup_20120221 名称
make_backup_name() {
    TEMPNAME=${BACKUP_PREFIX}$(date +"%Y%m%d")
}
 
# 产生临时备份目录
make_backup_dir() {
    make_backup_name
    TEMPDIR=${TEMP_PATH}/$?
    mkdir -m 777 -p $TEMPDIR
}
 
backup_files() {
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
        ${TEMP_PATH}/${TEMPNAME}.tar.gz ${BACKUP_FILENAME}
}
 
backup_databases() {
    local EXPORTDIR=$1
    ${MYSQLDUMP_PATH}/mysqldump -u${MYSQL_USERNAME} \
      -p${MYSQL_PASSWORD} \
      ${BACKUP_DBNAME} >${EXPORTDIR}/${BACKUP_DBNAME}.sql
 
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
      ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz ${EXPORTDIR}
}
 
send_byemail() {
    echo "**IMPORTANT BACKUP** Hi! :-)\n\n$(uname -a)"| \
        $MUTTMAIL_PATH/mutt -s "** System Backup$(date +%Y-%m-%d)" \
            -a ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz \
             ${TEMP_PATH}/${TEMPNAME}.tar.gz -- \
            ${BACKUP_RECEVIER}
}
 
# 清除产生的临时文件(使用了rm -rf怕怕中,不过目标路径正确就OK啦)
cleanup() {
    $RM_PATH/rm -rf $TEMPDIR
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}.tar.gz
}
 
main() {
   make_backup_dir
   backup_databases $TEMPDIR
   backup_files
   send_byemail
   cleanup
}
 
main
 
exit 0

继续阅读

使用MySQL Workbench CE管理MySQL数据库

之前我写过一篇文章《使用HeidiSQL管理MySQL数据库》提及在Windows下可视化管理MySQL的解决方案之一HeidiSQL,确实是个非常不错的软件,可能有些童鞋比如像我仍然不习惯其强大而又复杂的操作界面,可能需要的是一款类似于SQL Server查询分析器或者SQL Server Management Studio这样的集成管理环境,不需要太过于复杂,大部分操作可以手动用SQL语句完成。今天介绍的MySQL Workbench CE就是这么一款软件,这款软件还是由MySQL官方出品的,所以还是非常值得信赖的。

这款软件的界面简单,类似于微软出品的数据库管理软件,不像HeidiSQL那样界面复杂。最值得一提的是其带有SQL语句输入,语法高亮以及语法自动侦错功能,这个对于我这样的新手输入SQL语句简直太方便啦。另外这款数据库管理器还支持开启多选项卡同时管理多个数据库实例,非常好用。

好啦,不多说了,具体还是大家下载下来亲自体验吧:-)

软件主页:http://mysql.com/products/workbench/
下载地址:http://www.mysql.com/downloads/workbench/

继续阅读

使用HeidiSQL管理MySQL数据库

很多朋友可能在刚开始接触MySQL数据库时就被它那黑漆漆的命令提示符给吓跑了,经常有朋友会问,为什么MySQL没有查询分析器和企业管理器,好吧,那个是微软SQL Server的两个集成化环境,其实MySQL的第三方可视化界面还是有的,而且做得都非常不错,比如说PHPMyAdmin[项目主页],相信很多站长都用过PHPMyAdmin,在线管理的可视化模式确实比命令提示符省事不少,但是我们还是怀念像微软那样的查询分析器或者企业管理器,幸运的是,已经有人做了,而且做得非常不错,今天给大家介绍的就是HeidiSQL,一个MySQL数据库管理的客户端,可以将所有对MySQL的操作都可视化,这样我们也就无需去记住那繁琐的命令。一切都可以通过鼠标点击完成,听起来非常不错,赶紧试试吧,哦,对了,这么强大的工具还是开源的,看代码,貌似是Pascal/Delphi编写的。

项目主页:http://www.heidisql.com/
下载地址:http://www.heidisql.com/download.php

继续阅读