存档:mysql

博客记忆

四月 23, 2010 | c/c++, js/web, linux, mysql, php, 心情杂记, 数学 | RSS 2.0

很长时间没有更新日志,大概有几个月了,疏于对知识的学习和管理,可能是跟工作有点忙有关系吧,经常顾着不顾那个,放弃了诸多的学习机会,
不过希望以后能恢复,时间是一种财富,能让你积淀更多的对知识的理解,同时也能验证更多的真理,譬如坚持才是硬道理,这两个月坚持的最好的一件事情还算是对自己花销的记录很分类,方法比较土,就是使用网易的邮箱里的一个小插件,有时候别人问你一个月能花多少钱?像我这种不扫一屋的人是一无所知的,统计了下发现对多的是花在了吃上和没周末的超市。
记得以前写博客都是从外面copy一堆东西,可能是自己的知识欠缺的太多,发现一篇技术文章就copy过来,沾沾自喜一番感觉很有成就感,后来发现好多牛人都是自己写博客,发现自己土了,而且写的都是超高技术含量,,而且现在基本上很多的知识获取都是从blog获得的,自己也曾在google reader里面follow了一堆,曾经每天早上9点到公司都花费10分钟时间,不过有点不好,开始没分类好,造成后来好多看的时候乱,杂乱无章的,挑出那种令你很满意的需要去甄选,所以有时候就懒的去看了。
不过一些东西一旦写下来还是能整理下自己的思维的。而且能做下备忘,所以以后需要把这个习惯坚持下去。今天写这个主要是想试试用vim写博客,用的是vimpress插件,下载地址在http://www.vim.org/scripts/script.php?script_id=1953,下来后直接解压到.vim下就可以了,修改blog.vim下的秘密用户还xmlrpc就可以了。ok,here,travel start。

没有评论 »

编译安装mysql 5.141源代码,常见两处错误解决

十二月 14, 2009 | mysql | RSS 2.0

first u must add users for mysql account and group form mysqld

1 groupadd mysql

useradd -g mysql mysql
2 wget source code
http://dev.mysql.com/downloads/mysql/5.1.html 可以到此页面找到最下面
wget
如果是zip 文件 unzip mysql-1.41.zip
或者tar -xzvf mysql-5.1.41.tar.gz  cd mysql-5.1.41
编译安装可以优化许多参数,如静态编译,去掉自己不用字符集,如果不用innodb 也可以去掉。根据自己的环境及需要使用的option
量身打造mysql编译安装参数,据说有些选项可以调高mysql的性能。
./configure --prefix=/usr/local/mysql/ --with-comment=Source
 --with-server-suffix=liufb--without-debug --with-charset=utf8
--with-extra-charsets=latin1,gbk --enable-thread-safe-client
 --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
 --with-mysqld-libs=-all-static --enable-assembler
--without-innodb --with-unix-socket-path=/usr/local/mysql/sock/mysql.sock
如果出现checking for termcap functions library… configure: error: No curses/termcap library found 错误,安装ncurses就可以解决
如果是在debian或者ubuntu下这可以直接:aptitude install libncurses5-dev
或者手工编译下载安装,方法可以google下
编译 安装
# make &&  install
 cd /usr/local/mysql
 scripts/mysql_install_db --user=mysql
如果出现错误:
FATAL ERROR: Could not find mysqld
The following directories were searched:
        /usr/libexec
        /usr/sbin
        /usr/bin
是因为原来装有/etc/mysql/my.cnf引起的。将/etc/mysql/my.cnf删除
 chown -R root  /usr/local/mysql;
 chown -R mysql /usr/local/mysql/var;
 chgrp -R mysql /usr/local/mysql
 cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
 /usr/local/mysql/bin/mysqladmin -u root password '123456'

直接启动:/usr/local/mysql/share/mysql/mysql.server start
/usr/local/mysql/share/mysql/mysql.server stop
或者:
把mysql/bin添加到$PATH变量中:
export PATH=/usr/local/mysql/bin/:$PATH
/etc/init.d/mysqld start
mysql -u root -p12346

没有评论 »

mysql replication 报告

十二月 8, 2009 | mysql, 网站架构 | RSS 2.0

整理的一份mysql replication的报告,主要包括基本原理,一些常见的架构和replication的历史,不能同步等问题
Mysql Replication
View more documents from liufabin 66688.

没有评论 »

install mysql/pdo for php on debian debian下为php安装mysql pdo

十一月 5, 2009 | linux, mysql | RSS 2.0

debian is not install pdo default ,so i need install this extension,we can use phpsize ,but the simple way is
under this,when i search the method in google ,many chinese blog can’t solve my issues ,google.com is helpful to me .
first way:
# apt-get install dh-make-php dh-make-php
# pecl install pdo
# pecl install pdo_mysql
# pecl install pdo_sqlite
maybe u need excute this commond channel-update pecl.php.net
then config ur php.ini add like this:
extension=pdo.so
extension=pdo_mysql.so
extension=pdo_sqlite.so

then restart apache or nginx
another way:
$ sudo apt-get install php5-dev
$ sudo apt-get install php-pear
$ sudo apt-get install libmysqlclient15-dev
$ sudo pecl install pdo
$ PHP_PDO_SHARED=1 sudo pecl install pdo_mysql

Then, add these lines to php.ini somewhere to activate the new modules:
extension=pdo.so
extension=pdo_mysql.so
third way is to simple
apt-get install php5-common php5-mysql php5-sqlite

I hope that this guide is useful to u .

没有评论 »

mysql replication 自动倒库,启动配置主从库脚本

十一月 1, 2009 | linux, mysql | RSS 2.0

简单的写了一个,可以继续优化调整,需要一个cfont.sh。

#!/bin/bash
FONT="./cfont.sh"
source $FONT &>/dev/null
USERNAME="xxxx"
PASSWD="xxxxxxxx"
HOSTNAME="xxxxxxxxxxxxxx"
 
USERNAME247="xxxxxxxxxxxxxx"
PASSWD247="xxxxxxxxxxxxxxx"
HOSTNAME247="xxxxxxxxxxxxxxxxxxx"
 
DATABASE="xxxxxxxxxxxxxxxxx"
DATABASE247="xxxxxxxxxxxxxxxxxxxxxxxx"
 
DATA=`date '+%Y%m%d%k%M'`
DUMPSQL="dump$DATA.sql"
MASTERLOG="masterposition.log"
MYSQLHOST=" -h$HOSTNAME -u$USERNAME -p$PASSWD"
MYSQLHOST247=" -h$HOSTNAME247 -u$USERNAME247 -p$PASSWD247"
printUsage() {
	cfont -b -red  "Usage: $0" -reset -n
	cfont -b -red "Failed" -reset -n
	cfont -red " --dumptable" -reset -n
	return
}
 
locktable() {
	mysql $MYSQLHOST -e ' FLUSH TABLES WITH READ LOCK;' 
	if [ $? -ne 0 ]
	then
		cfont -b -red " lock table Failed" -reset -n;
		exit 3;
	else
		cfont -b -green "lock table OK" -reset -n;
	fi
}
unlocktable() {
	cfont -b -green "unlock tables" -reset -n;
	mysql $MYSQLHOST -e ' UNLOCK TABLES;' 
	if [ $? -ne 0 ]
	then
		cfont -b -red " unlock table Failed" -reset -n;
		exit 3;
	else
		cfont -b -green "unlock table OK" -reset -n;
	fi
}
 
dumptable() {
	locktable
	cfont -b -green "get master status pos file" -reset -n;
 
	STATUSALL=` mysql $MYSQLHOST -e 'show master status ;'|awk '{print $1,$2}'`
	STATUSFILE=`echo $STATUSALL|awk '{print $3}'`
	STATUSPOS=`echo $STATUSALL|awk '{print $4}'`
 
	cfont -b -green "start dump database" -reset -n;
	#mysqldump --opt $MYSQLHOST $DATABASE247 >$DUMPSQL 
	if [ $? -ne 0 ]
	then
		cfont -b -red "dump database  Failed" -reset -n;
		exit 3;
	else
		cfont -b -green "dump database  OK" -reset -n;
	fi
 
	unlocktable
	#unlock t ables
	cfont -b -green "start dump sql to $HOSTNAME247" -reset -n;
	mysql $MYSQLHOST247 -e "stop slave"
	mysql $MYSQLHOST247  $DATABASE247 < dump200910231804.sql ;
	echo $STATUSFILE $STATUSPOS >> $MASTERLOG
	mysql $MYSQLHOST247 -e "change master to master_host='$HOSTNAME247', master_port=3306,master_user='replication',master_password='replication',master_log_file='$STATUSFILE',MASTER_LOG_POS=$STATUSPOS"
	startslave
 
}
startslave() {
 
	mysql $MYSQLHOST247  -e "start slave"
 
	RESULT=`mysql $MYSQLHOST247 -e 'show status like "Slave_running"' -ss | awk '{print $2}'`
	if [ "$RESULT" == 'ON' ]
	then
		echo -e "$HOSTNAME247    Slave is running!"
	else
		echo -e "$HOSTNAME247    Slave is not running!"
	fi
 
}
if [ $# -eq 0 ] ; then
	printUsage
	exit 1
fi
 
case $1 in
	--dump) dumptable;;
	--help) printUsage; exit 1;;
	*) printUsage; exit 1;;
esac

没有评论 »

mysql的优化数据库两种方法,脚本

十一月 1, 2009 | linux, mysql | RSS 2.0

我说的优化就是简单的用optimize table

1 第一种方法就是脚本,本来自己写了一个,但是后来在网上发现了一个可以优化所有库的,还是比较好的,可以看下

用了sed和awk:

#################################################
#!/bin/sh
 
# this shell script finds tables and runs 'optimize table'
# @date 6/14/2006
# @author Son Nguyen
# @modified by Matt Rae 7/7/2006
 
MYSQLCONFIG="-hxxxxxxxxxx -uxxxxxxxxxxxxx -pxxxxxxxxxxxxxxxx "
printUsage() {
	echo "Usage: $0"
	echo " --optimize"
	return
}
 
 
doAllTables() {
	DBNAMES=`mysql $MYSQLCONFIG -e "SHOW DATABASES\G;" | grep 'Database' | sed -n 's/Database: //p'`
	for DBNAME in $DBNAMES
	do
		# get the table names
		TABLENAMES=`mysql $MYSQLCONFIG -D $DBNAME -e "SHOW TABLES\G;"|grep 'Tables_in_'|sed -n 's/.*Tables_in_.*: \([_0-9A-Za-z]*\).*/\1/p'`
 
		# loop through the tables and optimize them
		for TABLENAME in $TABLENAMES
		do
			mysql $MYSQLCONFIG -D $DBNAME -e "OPTIMIZE TABLE $TABLENAME;"
		done
	done
}
 
if [ $# -eq 0 ] ; then
	printUsage
	exit 1
fi
 
case $1 in
	--optimize) doAllTables;;
	--help) printUsage; exit 1;;
	*) printUsage; exit 1;;
esac


第二种方法就是巧用数据库里面的表信息,如下:
mysql xxxx -e “select concat(’optimize table ‘,table_schema,’.',table_name,’;') into outfile
‘/u01/data/opti.sql’ from,<<< information_schema.ta<

cat /u01/data/opti.sql optimize table test.test; optimize table test.test2; optimize table test.zzz; mysql -u sg -p’xxxx’ < /u01/data/opti.sql test.test optimize status OK Table Op Msg_type Msg_text test.test2 optimize status OK Table Op Msg_type Msg_text 另外也可以用一个mysql的工具用perl写的,mk-find ,可以一下搞定,前几天在搞msql,数据库同步的时候遇到了一个号的工具Maatkit这个工具,有很多使用工具,国内很少人用,dba比本工具,好多使用的命令,倒库的比mysqldump快好多,多线程的运行。国内的http://www.bigheaddba.net/这个博客有较为详细的介绍

没有评论 »

shell里面如何进行mysql的操作

七月 8, 2009 | linux, mysql | RSS 2.0

参考并致谢:
http://bbs2.chinaunix.net/viewthread.php?tid=971798

下面这个是我学到的,并能操作分表后的多个数据表,根据你分表的数量,这样你可以进行批量修改表的结构等
#!/bin/bash
USER=username
PASS=password
MYSQL=your mysqlbin path
SQLOPT=” -u$USER -p$PASS -S/tmp/mysql-new.sock $@”
DBNAME=your databasename;
TABLENUMBER=80
mysql_opt() {
  db_name=$1
  sql_query=$2
  $MYSQL $SQLOPT << EOF
    USE $db_name;
    set names utf8;
    $sql_query;
    QUIT
EOF
}

for  i in `seq 0 78`
do
mysql_opt $DBNAME “select * from blog_$i limit 2 G;”

sleep 1;

done
如果是简单的执行一条语句,则可以:
mysql -uroot -padmin -e “$sql”

没有评论 »

同一台机器mysql–replication

七月 5, 2009 | linux, mysql | RSS 2.0

参考文章:
1:http://www.howtoforge.com/one_machine_mysql_replication
2:http://robinwu.javaeye.com/blog/310839
如果机器上已经用apt-get install安装了mysql,则可以用以下方式去除
 1 apt-get –purge remove mysql-server 
2
apt-get –purge remove mysql-common 
创建文件夹/misu:

tar xzvf /mysql-5.0.67.tar.gz.tar.gz

cd /misc//mysql-5.0.67.tar.gz

./configure –prefix=/usr/local/mysql-master

make

make install

cd /usr/local/mysql-master/bin

./mysql_install_db

(it will create a var folder )

cd ../var

cp /misc//mysql-5.0.67.tar.gz/support-files/my-medium.cnf my.cnf

cd ..

groupadd mysql

useradd -g mysql mysql

chown -R root .

chown -R mysql var

chgrp -R mysql

查看my.cnf

[mysqld]

port = 3306

socket = /usr/local/mysql-master/mysql.sock

#skip-networking // we have skip this in our case as we are doing both master and slave on same machine.

# Replication Master Server (default)

# binary logging is required for replication

log-bin

# required unique id between 1 and 2^32 - 1

# defaults to 1 if master-host is not set

# but will not function as a master if omitted

server-id = 1

cd /usr/local/mysql-master/bin

./mysqld_safe –defaults-file=/usr/local/mysql-master/var/my.cnf


MySQL Slave:

Now extract mysql-4.1.12.tar.gz at different dir,

cd /opt/mysql-4.1.12

./configure –prefix=/usr/local/mysql-slave

make

make install

cd /usr/local/mysql-slave

cd bin

./mysql_install_db

(it will create a var folder )

cd ../var

cp /opt/mysql-4.1.12/support-files/my-medium.cnf my.cnf

cd ..

groupadd mysql

useradd -g mysql mysql

chown -R root .

chown -R mysql var

chgrp -R mysql .

Edit my.cnf in the var folder
[mysqld]
port = 3307
socket = /usr/local/mysql-slave/var/mysql.sock

#skip-networking

server-id = 2

# The replication master for this slave – required
master-host = localhost
master-user = slavedb
master-password = q1w2e3r4t5
master-port = 3306
Now starts the mysql server by:

cd /usr/local/mysql-slave/bin

./mysqld_safe –defaults-file=/usr/local/mysql-slave/var/my.cnf &

Configure Replication:

connect to mysql master by:

mysql –sock=/usr/local/mysql-master/mysql.sock

Create account at master for slave:

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slavedb@”192.168.1.27/255.255.255.0″ identified by ‘q1w2e3r4t5′;Query OK, 0 rows affected (0.28 sec)

connect to mysql slave by:

mysql –sock=/usr/local/mysql-slave/mysql.sock

mysql> slave start;

Query OK, 0 rows affected, 1 warning (0.04 sec)


没有评论 »

数码摄影技巧

六月 27, 2009 | mysql | RSS 2.0

 今日看了看《跟我学数码摄影》,里面还是有些东西值得学习的,豆瓣的地址:http://www.douban.com/subject/3208677。
记录下他们介绍的原则:
摄影构图的基本原则
1 选择和突出主体
2 尽可能简单
3 似与不似之间
4 确定注视中心的位置:由矩形的某一个顶点向对角线做一条垂线,垂线与对角线相交的这个点式确定注视中心的最合适的位置
5 三分之一原则。
6 黄金分割和井字格
7中心对称构图
8对称与非对称
9 运用前景
10 明暗对比
11 虚实对比
12 横与竖
13 视线牵引
14 近大远小
15 抽象的摄影
16 视线运动的前方要留白
17 色彩的冷暖和象征
18 色彩的和谐
19 色彩的互补和对比
20 倾斜和动感

没有评论 »

数据库永久连接mysql_pconnect和mysql_connect

六月 25, 2009 | mysql | RSS 2.0

    一直对mysql_pconnect 和mysql_connect的理解差别是p链接是持久链接,不会关闭了链接,即使你使用了mysql_close();建立连接后,将保持sleep状态,可以使用show processlist 查看有哪些正在sleep的连接,这样p链接的好处是当有新的请求时就直接返回这个连接,感觉类似于http1.1协议的keep-alive的用法,到底是开个还是关呢还是不关呢,一般那些专家都告诉你,当用户量不多时,可以打开keep -live 这样可以,在http协议进行打交道时,给用户保持连接。用户第一次打开建立,然后继续浏览时就不需要新开了,提高用户的体验,当用户量比较大的时候,大量的保持连接会给服务器造成很大压力,所以需要找一个平衡点是开到底还是不开,回过头来看mysql_p 的理解:    在网上搜索了没有找到满意的答案,但是在竟然在手册上看到一个解释的比较完美的,看来以后应该多看手册:
    定义:
    永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。
    先看看手册上的总结:
    永久连接是为通常连接建立一对一的分布而设计的。这意味着必须能够保证在将永久连接替换为非永久连接时,脚本的行为不会改变。使用永久连接将(非常)有可能改变脚本的效率,但不改变其行为!
    如果永久连接并没有任何附加的功能,那么使用它有什么好处?
    答案非常简单――效率。当客户端对 SQL 服务器的连接请求非常频繁时,永久连接将更加高效。连接请求频繁的标准取决于很多因素。例如,数据库的种类,数据库服务和 web 服务是否在同一台服务器上,SQL 服务器如何加载负载等。但我们至少知道,当连接请求很频繁时,永久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向 SQL 服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的永久连接。例如,如果有 20 个不同的子进程运行某脚本建立了永久的 SQL 服务器永久连接,那么实际上向该 SQL 服务器建立了 20 个不同的永久连接,每个进程占有一个。
    注意,如果永久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些缺陷。如果数据库的同时连接数限制为 16,而在繁忙会话的情况下,有 17 个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的 16 个连接将迅速地受到影响。请查阅使用的数据库的文档,以获取关于如何处理已放弃的及闲置的连接的方法。
    警告:在使用永久连接时还有一些特别的问题需要注意。例如在永久连接中使用数据表锁时,如果脚本不管什么原因无法释放该数据表锁,其随后使用相同连接的脚本将会被永久的阻塞,使得需要重新启动 httpd 服务或者数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用 register_shutdown_function() 函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的处理方法,是不在使用数据表锁或者事务处理的脚本中使用永久连接,这可以从根本上解决这个问题(当然还可以在其它地方使用永久连接)。

 web 服务器可以用三种方法来利用 PHP 生成 web 页面。

 第一种方法是将 PHP 用作一个“外壳”。以这种方法运行,PHP 会为向 web 服务器提出的每个 PHP 页面请求生成并结束一个 PHP 解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向 SQL 数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变――因为它们根本不是永久的。

第二,也是最常用的方法,是把 PHP 用作多进程 web 服务器的一个模块,这种方法目前只适用于 Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成 web 页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求 SQL 服务的后继页面都能够重新使用这个已经建立的 SQL Server 连接。

最后一种方法是将 PHP 用作多线程 web 服务器的一个插件。目前 PHP 4 已经支持 ISAPI、WSAPI 和 NSAPI(在 Windows 环境下),这些使得 PHP 可以被用作诸如 Netscape FastTrack (iPlanet)、Microsoft’s Internet Information Server (IIS) 和 O’Reilly’s WebSite Pro 等多线程 web 服务器的插件。永久连接的行为和前面所描述的多过程模型在本质上是相同的。注意 PHP 3 不支持 SAPI。

没有评论 »