网站都挂掉了

作者:dawncold 发布时间:May 2, 2012 分类:技术

突然发现mysql无法用localhost连接进去,而用127.0.0.1可以。

linux下是这样的,如果用localhost连接是走的socket路线,用127.0.0.1走的是tcp路线。

修改了php.ini中的mysql.default_socket,值为mysql.sock的文件路径,重启php就好了,不过phpmyadmin的问题依然没有解决,我只是把连接主机换成了127.0.0.1暂时用着。

用python备份mysql

作者:dawncold 发布时间:April 27, 2012 分类:技术

备份数据库的重要性不想多说了。


#! /usr/bin/env python
# coding: utf-8

import os
import sys
from datetime import *
import time

#mysql's path
mysql_path = '/usr/local/mysql/bin/'
#edit this if your mysql username and password is not like this:
mysql_username = 'root'
mysql_password = 'xxxxxx'
#backup path
backup_path = 'mysqlbackup/'

def validate_backup_path():
	if os.path.exists(backup_path) == False:
		print "I create a directory here: %s " % backup_path
		os.mkdir(backup_path)

def backup_all_databases():
	filename = "all_%s.sql" % (datetime.utcfromtimestamp(time.time()))
	os.system("%smysqldump -u%s -p%s --all-databases > '%s%s'" % (mysql_path, mysql_username, mysql_password, backup_path, filename))

if __name__ == "__main__":
	validate_backup_path()
	backup_all_databases()
	print "finish!!!"

这个是修改了一次的备份脚本,本来是分数据库备份的,无奈制定了分数据库备份需要输入密码,这就不容易加入cron来自动完成了,不过听说在my.cnf中加入mysqldump的设置可以避免输入账号密码,这也算是一个办法吧,不过还是本着简化的思想,只导出所有数据库出来就好,配合着上一篇的dropbox自动备份,这样VPS的灾备就稍稍好些了:)

安装mysql的Ruby驱动遇到的问题

作者:dawncold 发布时间:February 9, 2012 分类:技术

dawncold@tianzhenmatoMacBook-Pro ~$ gem install mysql
Fetching: mysql-2.8.1.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
	ERROR: Failed to build gem native extension.

        /usr/local/Cellar/ruby/1.9.3-p0/bin/ruby extconf.rb
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/local/Cellar/ruby/1.9.3-p0/bin/ruby
	--with-mysql-config
	--without-mysql-config
	--with-mysql-dir
	--without-mysql-dir
	--with-mysql-include
	--without-mysql-include=${mysql-dir}/include
	--with-mysql-lib
	--without-mysql-lib=${mysql-dir}/lib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-mlib
	--without-mlib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-zlib
	--without-zlib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-socketlib
	--without-socketlib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-nsllib
	--without-nsllib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-mygcclib
	--without-mygcclib
	--with-mysqlclientlib
	--without-mysqlclientlib


Gem files will remain installed in /usr/local/Cellar/ruby/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql-2.8.1 for inspection.
Results logged to /usr/local/Cellar/ruby/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql-2.8.1/ext/mysql_api/gem_make.out

是Mac平台,安装了MySQL5.5.20,搜索了一番,似乎是因为已经安装了mysql没有指定已安装的mysql路径出现的问题,于是指定一个过去:


gem install mysql -- --with-mysql-dir=/usr/local/mysql

一开始的那两个“--”不能省略,而且发现参数中那个等号左右最好别带空格,我是代码习惯了等号周围加空格,在这里竟然会出错。

我已经解决问题了,成功安装mysql的ruby驱动,如果仍然遇到问题,可以试试参考这里(同样感谢这里)。

mac下的MySQL-python问题

作者:dawncold 发布时间:December 11, 2011 分类:技术,Mac

刚刚在学习web.py这个框架,找了一个不错的例子准备自己运行起来看看,结果一调试出现了MySQLdb没找到的情况,于是从官方(http://sourceforge.net/projects/mysql-python/)下载源码准备编译安装,最好不要用easy_install安装了,因为还得修改几个地方才能正常编译安装。

由于是mac系统,MySQL是使用的官方提供的dmg安装包装的,但不知为何MySQLdb的安装脚本找不到位置,于是修改MySQLdb的setup_posix.py,26行有个mysql_config.path = ...,修改成你本机中mysql_config所在的地址,比如我的是/usr/local/mysql/bin/mysql_config,保存后分别执行:


sudo python setup.py build
sudo python setup.py install

安装后最好用python的shell加载一下MySQLdb看看能否正常使用,通常是不行的,因为我就遇到这么个情况,提示缺少image,具体是这样提示的:


 File "/Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/_mysql.so
  Reason: image not found

于是用Google搜索问题,从这里找到了解决方案:

在~/.bash_profile中加入这样的一句:


export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

然后quit掉terminal再进入一次让这个环境变量更新一下,再次使用MySQLdb就没问题了。

重置MySQL密码

作者:dawncold 发布时间:December 7, 2011 分类:技术

前几天在Mac系统下装了MySQL,装完后是默认没有给root用户带密码的,于是出于安全考虑我就加上了密码,加密码的方式如下:


mysqladmin -u root password "mysqlpassword"

很明显引号内的是root用户的新密码。

但在使用的时候我一时想不起来密码了,于是搜索到了官方的Reset the password of MySQL,但看着好麻烦,没有尝试,在这里找到了方法,贴出来主要代码:

先停止mysql的服务,用下面这句启动mysql:


mysqld_safe --skip-grant-tables --skip-networking &

用SQL语句修改root的密码:


UPDATE mysql.user SET Password=PASSWORD('...') WHERE User='...' AND Host= '...';
FLUSH PRIVILEGES;

单引号内的东西自己补充吧,第一个是新密码,第二个写root,第三个用localhost就可以了。