2010年9月19日 星期日

php連sybase資料庫時可寫名稱,不用寫IP

ssh> cd /usr/local/etc
ssh> vi freetds.conf

寫成以下
[sybase_db1]
        host = 10.10.10.1
        port = 4000
        tds version = 5.0
        client charset = utf8

[sybase_db2]
        host = 10.10.10.2
        port = 4000
        tds version = 5.0
        client charset = utf8


這樣php在連sybase資料庫時可寫成
sybase_connect("sybase_db1","帳號","密碼","編碼big5或utf8",'');

2010年9月17日 星期五

用outfile的方式備份所有table資料

table schema需另外備份
MySQL Store Procedure:


DELIMITER $$

DROP PROCEDURE IF EXISTS `DBName`.`sp_u_backupdata` $$
CREATE DEFINER=`peijuan`@`%` PROCEDURE `sp_u_backupdata`()
BEGIN

DECLARE done INT DEFAULT 0;
Declare DBNAME VARCHAR(20);
Declare TABLENAME VARCHAR(20); /* table name */
Declare MD VARCHAR(4);   /* date-mmdd */
Declare out_file VARCHAR(100);
Declare dir VARCHAR(100);
Declare outdir VARCHAR(200);

Declare cur CURSOR FOR
SELECT table_schema, table_name FROM information_schema.`TABLES` where table_schema not in ('information_schema','mysql','test');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

SELECT DATE_FORMAT(now(),'%m%d') INTO MD;  /* mmdd */

SET dir = concat('/data/mysql_dump/',MD,'/');  /* /data/mysql_dump/mmdd/  */

OPEN cur;

REPEAT
FETCH cur INTO DBNAME,TABLENAME;

IF NOT done THEN

SET out_file = concat(DBNAME,'.',TABLENAME);  /* db.table */

SET outdir = concat(dir,out_file,'.txt'); /* /data/mysql_dump/mmdd/xxx.xxx.txt */

/* out file data */
SET @dyn_sql = concat('select * into outfile''',outdir,'''',
'fields terminated by ''<|&|>''',
'lines terminated by ''<|^|>''',
'from ',out_file);

PREPARE s1 from @dyn_sql;

EXECUTE s1;

END IF;
UNTIL done END REPEAT;

CLOSE cur;

END $$
DELIMITER ;

SH:

#!/bin/sh

WORKDIR='/data/mysql_dump/'`date '+%m%d'`
NOW=`date '+%m%d'`

#若資料夾不存在,則建立資料夾 -p指不出現錯誤訊息 -m770指給770的權限
test -d $WORKDIR || mkdir -p -m770 $WORKDIR

#呼叫store procedure
/usr/local/bin/mysql -uxxx -pxxx -e "CALL DBName.storeprocedure_name()"

cd /data/mysql_dump/

#壓縮資料
tar pzcf $NOW.tar.gz $NOW

#刪除資料
rm -rf $NOW

2010年9月13日 星期一

變更MySQL安裝路徑

FreeBsd:
MySQL版本:5.1

1. 編輯Makefile
vi /usr/ports/databases/mysql51-server/Makefile


CONFIGURE_ARGS= --localstatedir=/var/db/mysql \
                --without-debug \
                --without-readline \
                --without-libedit \
                --with-libwrap \
                --with-low-memory \
                --with-comment='FreeBSD port: ${PKGNAME}' \
                --enable-thread-safe-client
的 
--localstatedir=/var/db/mysql \ 
改成要的路徑
ex:
CONFIGURE_ARGS= --localstatedir=/database/mysql \
                --without-debug \
                --without-readline \
                --without-libedit \
                --with-libwrap \
                --with-low-memory \
                --with-comment='FreeBSD port: ${PKGNAME}' \
                --enable-thread-safe-client
存檔。

2.編輯mysql-server.sh.in
vi /usr/ports/databases/mysql51-server/files/mysql-server.sh.in
: ${mysql_enable="NO"}
: ${mysql_limits="NO"}
: ${mysql_dbdir="/var/db/mysql"}
: ${mysql_args=""}
: ${mysql_dbdir="/var/db/mysql"}
改成要的路徑
ex:
: ${mysql_enable="NO"}
: ${mysql_limits="NO"}
: ${mysql_dbdir="/database/mysql"}
: ${mysql_args=""}
存檔。

3.開始安裝MySQL

2010年9月12日 星期日

將文字檔資料Load回 TABLE

CHARACTER SET:編碼
fields:分隔符號
lines:分行符號

EX:將test.abc.txt的資料Load回 test db下的 abc TABLE
LOAD DATA INFILE '/var/db/mysql/test.abc.txt'
into table test.abc
CHARACTER SET big5
fields terminated by '||'
lines terminated by '<>';

將MySQL TABLE資料產生成文字檔

fields:分隔符號
lines:分行符號


EX:將test db下的 abc TABLE的所有資料,產生成文字檔
select * into outfile '/var/db/mysql/test.abc.txt'
fields terminated by '||'
lines terminated by '<>'
from test.abc

2010年9月10日 星期五

查詢和修改MySQL的動態參數設定

查詢參數
EX:
select @@global.sql_mode;
select @@session.sql_mode;

設定參數
set global XXX

set SESSION XXX
不需重新啟動MySQL

EX:
set global expire_logs_days = 2; //設定bin-log的過期時間為2天

參考資料:
http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/dynamic-system-variables.html
http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/set-option.html

2010年9月1日 星期三

修改InnoDB流水號的建立方式

MySQL版本:5.1
ENGINE版本:InnoDB

發現在insert 資料 unique 欄位發生 duplicate時,雖然資料無新增至 table ,但流水號還是繼續加 1,若不讓流水號在發生 duplicate 時,還繼續往上增加的方式為:
在 my.cnf 加入 innodb_autoinc_lock_mode = 0,預設為1

參考來源:http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_autoinc_lock_mode