2010年9月22日 星期三
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",'');
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
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
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 '<>';
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
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
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
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
訂閱:
文章 (Atom)