helloworld

目前分類:資料庫 (17)

瀏覽方式: 標題列表 簡短摘要

雖然說事出必有因
但是如果真的找不出因或是暫時沒心情找原因
可以參考以下作法
1. 暫時讓使用者無法連上 db (用防火牆阻擋、把密碼先改掉、停掉所有ap服務...很多很多方法,挑自己適用的)
2. 從 master把 異常的 table dump 出來
3. 在 master db 把 table 改名,心臟夠力的可以直接 drop
4. 把剛剛dump出來的資料load回去
5. 剛剛的3,4步驟會寫入 binlog, 經由 replication 的機制同步到slave
6. 測試異動一筆資料看看
7. 將步驟1做的動作復原
8. 收工

,

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

master 10.0.0.100
slave 10.0.0.200

*** master ***

# vi /etc/my.cnf
server-id = 100
log_bin /var/lib/mysql/mysql-bin.log

# /etc/init.d/mysqld restart

# mysql -u root -pxxx
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'passw0rd';

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 251 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
//remember the position

# mysqldump -u root -pxxxx --all-databases > all-databases.sql;

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)


*** slave ***
# scp login@10.0.0.100:all-databases.sql .

# vi /etc/my.cnf
server-id = 200
log_bin = /var/lib/mysql/mysql-bin.log

# /etc/init.d/mysql restart

# mysql -u root -pxxxx < all-databases.sql

mysql -u root -pxxxx
mysql> CHANGE MASTER TO
> MASTER_HOST='10.0.0.100',
> MASTER_USER='repl',
> MASTER_PASSWORD='passw0rd',
> MASTER_LOG_FILE='mysql-bin.000001',
> MASTER_LOG_POS=251;

mysql> START SLAVE;

,

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

#新安裝mysql, 修改root密碼
mysqladmin -u root password 'rootpass'

#建立資料庫,名稱為db1
create database db1;

#建立使用者 webap
CREATE USER 'webap'@'localhost' IDENTIFIED BY 'webpass';

#讓 webap 有權限可以存取 db1
GRANT ALL ON db1.* TO 'webap'@'localhost';

#my.cnf 的路徑
/usr/local/libexec/mysqld --help --verbose

./libexec/mysqld Ver 5.5.44-MariaDB for FreeBSD9.3 on amd64 (FreeBSD Ports)
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Starts the MariaDB database server.

Usage: ./libexec/mysqld [OPTIONS]

Default options are read from the following files in the given order:
/usr/local/etc/my.cnf /usr/local/etc/mysql/my.cnf ~/.my.cnf

# innodb預設會將所有table的data及index儲存在ibdata1,時間一久這個檔案就會變得很大,建議可以將每個table分開儲存
1. 備份所有資料庫
mysqldump -u root -prootpw --all-databases > all-db.sql
2. 關閉mysql
mysqladmin -u root -prootpw shutdown
3. 編輯my.cnf
[mysqld]
innodb_file_per_table=1
4. rm ibdata1
5. 匯入資料庫
mysql -u root -prootpw < all-db.sql
6. 檢查檔案
確定每一個table是否有多出一個*.idb的檔案
table1.frm
table1.idb

# mysqldump 時讓每一筆record都是一個insert語法
mysqldump時預會把一個table裡面的資料塞成同一個insert語法,如果要讓每一筆紀錄都是一行insert時
加上 --skip-extended-insert 參數即可

#mysqldump 也可以下where 條件
example: mysqldump -u root -p mysql user --where="user='root'"

#某先狀況下,修改使用者權限,但未生效,可以重新載入權限
FLUSH PRIVILEGES ;

#動態修改mysql參數,但重啟後參數會恢復到預設值

SET GLOBAL character_set_database = 'utf8';
SET GLOBAL character_set_server = 'utf8';
SET GLOBAL collation_database = 'utf8_general_ci';
SET GLOBAL collation_server = 'utf8_general_ci';

# 鎖定資料表,防止寫入
FLUSH TABLES WITH READ LOCK;

# 解除鎖定
UNLOCK TABLES;

#mysqldump 但不包含某個table
 mysqldump -u root -p database_name --ignore-table=database_name.story

(未完成)

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

當我們在php裡面要建立一個sybase資料庫的連線時
$link = sybase_connect ("server","login","password");
會出現 Warning: Sybase: Server message: Changed database context to 'master' 這樣的訊息
通常我們第一個反應是,在sybase_connect前面加個 @就好啦
如 $link = @sybase_connect ("server","login","password");

但是其實還有另一個做法
http://tw2.php.net/manual/en/function.sybase-min-client-severity.php

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

(SizeofDatabase * NumberOfReplicas * 1.1 ) / NumberOfDataNodes

MySQL官方資料 : http://dev.mysql.com/doc/refman/5.0/fr/mysql-cluster-faq.html

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

ERROR 1214 (HY000)  The used table type doesn't support FULLTEXT indexes
不可以有FULLTEXT index

ERROR 1118 (42000)  Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8052. You have to change some columns to TEXT or BLOBs
欄位長度總和不能過長
測試新增一個ndbcluster的table ...裡面只有一個欄位,最大的長度到
varchar (2680)而以,再大就過不去了 >_<

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

mgm node看起來沒什麼load,決定把他加上sql node的群組

[root@node1 ~]# vi /var/lib/mysql-cluster/config.ini
[mysqld]
hostname=10.0.0.102
id=2
[mysqld]
hostname=10.0.0.101
id=11

[root@node1 ~]# vi /etc/my.cnf
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=node1
[mysql_cluster]
ndb-connectstring=node1

ndb服務shutdown (補充說明一下,這個動作可以把ndb_mgmd & ndbd 都shutdown , mysqld 不會shutdown)
[root@node1 ~]# ndb_mgm -e shutdown

重新再讀一次設定檔
[root@node1 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

再去data node 把ndbd帶起來

最後把sql node的mysqld 帶起來,當然包括剛剛加上去的node1
[root@node1 ~]# service mysql start

觀察一下目前cluster的狀態
[root@node1 ~]# ndb_mgm -e show
Connected to Management Server at: node1:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @10.0.0.103  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   2 node(s)
id=2    @10.0.0.102  (mysql-5.1.44 ndb-7.1.4)
id=11   @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

最後如果可以讀到在其他sql node建立起來的資料的話就是成功囉!!
mysql> select * from table1;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.01 sec)



helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

將MyISAM的table格式轉換為cluster格式
mysql> ALTER TABLE table1 ENGINE=NDBCLUSTER;
Query OK, 2 rows affected (0.96 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> show create table `table1`;
+--------+------------------------------------
| Table  | Create Table
+--------+------------------------------------
| table1 | CREATE TABLE `table1` (
  `a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 |
+--------+------------------------------------
1 row in set (0.01 sec)

-rw-rw---- 1 mysql mysql 8554 Aug 11 15:34 table1.frm
-rw-rw---- 1 mysql mysql    0 Aug 11 15:34 table1.ndb
-rw-rw---- 1 mysql mysql 8554 Aug 11 15:05 table2.frm
-rw-rw---- 1 mysql mysql    0 Aug 11 15:05 table2.ndb

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

開始建table囉
首先看看有沒有支援ndbcluster
mysql> show engines;
| ndbcluster | YES .... (略)

mysql> use test;

以前會醬子create table
mysql> create table `table1` (a int);
Query OK, 0 rows affected (0.06 sec)

現在你要醬子create table
mysql> create table `table2` (a int) ENGINE=ndbcluster;
Query OK, 0 rows affected (0.73 sec)

實際到os下面看看檔案格式有什麼不一樣
-rw-rw---- 1 mysql mysql 8554 Aug 11 14:59 table1.frm
-rw-rw---- 1 mysql mysql    0 Aug 11 14:59 table1.MYD
-rw-rw---- 1 mysql mysql 1024 Aug 11 14:59 table1.MYI
-rw-rw---- 1 mysql mysql 8554 Aug 11 15:05 table2.frm
-rw-rw---- 1 mysql mysql    0 Aug 11 15:05 table2.ndb

塞幾筆資料進去看看
mysql> insert table1 values (1);
mysql> insert table1 values (2);
mysql> insert table2 values (1);
mysql> insert table2 values (2);

mysql> select * from table1;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

mysql> select * from table2;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

再看一下檔案有甚麼不一樣
-rw-rw---- 1 mysql mysql 8554 Aug 11 14:59 table1.frm
-rw-rw---- 1 mysql mysql   14 Aug 11 15:07 table1.MYD
-rw-rw---- 1 mysql mysql 1024 Aug 11 15:07 table1.MYI
-rw-rw---- 1 mysql mysql 8554 Aug 11 15:05 table2.frm
-rw-rw---- 1 mysql mysql    0 Aug 11 15:05 table2.ndb

嗯..看起來data都是已經寫到data node去囉:D

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

master 現在是node3
[root@node3 ~]# ndb_mgm -e show
Connected to Management Server at: 10.0.0.101:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @10.0.0.103  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2    @10.0.0.102  (mysql-5.1.44 ndb-7.1.4)

試試模擬node3的ndbd掛掉的時候看看會怎樣
[root@node3 ~]# killall ndbd

node4接手變成master了
[root@node3 ~]# ndb_mgm -e show
Connected to Management Server at: 10.0.0.101:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3 (not connected, accepting connect from 10.0.0.103)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2    @10.0.0.102  (mysql-5.1.44 ndb-7.1.4)

重啟在node3啟動ndbd後會怎樣咧??
[root@node3 ~]# ndb_mgm -e show
Connected to Management Server at: 10.0.0.101:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @10.0.0.103  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2    @10.0.0.102  (mysql-5.1.44 ndb-7.1.4)

[root@node3 ~]# ndb_mgm -e show
Connected to Management Server at: 10.0.0.101:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @10.0.0.103  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2    @10.0.0.102  (mysql-5.1.44 ndb-7.1.4)

嗯.. 結論是..node4繼續當他的master ... (筆記)

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

MySQL的cluster主要分為3種node
mgm node 沒錯,照字面上看起來就是管理用的node
sql node 未來查詢都會透過這個node來做增刪改查
data node 存放資料的地方

首先準備4台機器,裝好Linux作業系統,其他套件都不要選
10.0.0.101 (mgm node)
10.0.0.102 (sql node)
10.0.0.103 (data node)
10.0.0.104 (data node)

編輯四台node的/etc/hosts (非必要,只是我的怪僻XD)
10.0.0.101    node1
10.0.0.102    node2
10.0.0.103    node3
10.0.0.104    node4

安裝MySQL Cluster前把iptables / SELinux 都關掉先,會少很多麻煩
如果要關掉SELinux,必須要reboot
chkconfig iptables off
vi /etc/sysconfig/selinux
SELINUX=enforcing 修改為 SELINUX=disabled
reboot

下載需要的套件回來,以下是前幾天下載的7.1.4b,現在最新的版本是7.1.5
http://dev.mysql.com/downloads/cluster/

MySQL-Cluster-gpl-client-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-clusterj-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-debuginfo-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-devel-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-embedded-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-extra-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-management-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-server-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-shared-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-storage-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-test-7.1.4b-1.rhel5.x86_64.rpm
MySQL-Cluster-gpl-tools-7.1.4b-1.rhel5.x86_64.rpm

如果不想安裝全部,各Node基本需要的套件如下
mgm node
rpm -ihv MySQL-Cluster-gpl-management*.rpm
rpm -ihv MySQL-Cluster-gpl-tools*.rpm
sql node
rpm -ivh MySQL-Cluster-gpl-server*.rpm
rpm -ivh MySQL-Cluster-gpl-client*.rpm
data node
rpm -ihv MySQL-Cluster-gpl-storage*.rpm

省得麻煩的話,就全裝唄XD

開始設定了,在mgm node
如果沒有/var/lib/mysql-cluster的話就自己建一個目錄
[root@node1 ~]# mkdir -p /var/lib/mysql-cluster
[root@node1 ~]# vi /var/lib/mysql-cluster/config.ini

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[tcp default]
portnumber=2202
[ndb_mgmd]
hostname=10.0.0.101
id=1
datadir=/var/lib/mysql-cluster
[ndbd]
hostname=10.0.0.104
datadir=/var/lib/mysql-cluster
id=4
[ndbd]
hostname=10.0.0.103
datadir=/var/lib/mysql-cluster
id=3
[mysqld]
hostname=10.0.0.102
id=2

編輯sql node的/etc/my.cnf

[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=node1   ##這邊要寫mgm node的位址
[mysql_cluster]
ndb-connectstring=node1   ##這邊要寫mgm node的位址


啟動服務
順序: mgm node -> data node -> sql node
mgm node:
[root@node1 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial (第一次執行要加-f /var/lib/mysql-cluster/config.ini
--initial , 第二次以後就不用了)
觀察一下mysql cluster的狀態,我們可以用以下的指令
[root@node1 ~]# ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3 (not connected, accepting connect from 10.0.0.103)
id=4 (not connected, accepting connect from 10.0.0.104)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2 (not connected, accepting connect from 10.0.0.102)


data node:
ndbd --initial (第一次執行要加 --initial , 第二次以後就不用了)
如果無法啟動的話,可以直接指定他mgm node在哪邊
[root@node3 ~]# ndbd -c node1
[root@node1 ~]# ndb_mgm -e show
Connected to Management Server at: 10.0.0.101:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @10.0.0.103  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2 (not connected, accepting connect from 10.0.0.102)

sql node:
service mysql start (注意!!不是mysqld喔)
最後看看狀態,是不是所有的node都起來了
Connected to Management Server at: node1:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @10.0.0.103  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)
id=4    @10.0.0.104  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.0.0.101  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]   1 node(s)
id=2    @10.0.0.102  (mysql-5.1.44 ndb-7.1.4)

嗯..看來 data node要的記憶體要大一點.. (筆記)

參考資料:
http://forum.icst.org.tw/phpbb/viewtopic.php?f=10&t=17903
http://twpug.net/docs/mysql-5.1/ndbcluster.html
http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html
http://www.codecharge.com.tw/phpBB3/viewtopic.php?f=11&t=540



helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

# cd charsets
# charset -Usa -Ppassword -Sserver_name binary.srt big5
# isql
1> use master
2> go
1> sp_configure "default sortorder id",50,"big5"
2> go
1> shutdown
2> go
                                                                               
重新啟動sybase server兩次(第一次一定會失敗),即可

延伸閱讀:新手上路 Sybase Adaptive Server Enterprise(範例光碟)

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

發現有某支程式卡住了,卻不知道停在哪段sql怎麼辦?
快進isql,先抓出這支程式ㄉpid
然後下
1> dbcc traceon(3604)
2> go
1> dbcc sqltext(<spid>)
2> go
1> dbcc traceoff(3604)
2> go
 

就可以知道是卡在哪一段sqlㄌ

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

sybase client 內建的uninstall程式..移的不是很乾淨
如果要重灌其他版本的pcclient會發現他會警告你
然後不給你重新安裝
這個時候..

可以windows目錄下面
有一ㄍ檔名叫"vpd.properties"的file 記錄了你之前裝過什麼東東
把它rename之後就可以重新安裝ㄌ!!

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

如果要把dump出來的資料庫load回
要是不知道之前的資料庫建置的時候device的分布
往往會在新的資料庫中把data和log混用

所以...
把device的配置select出來先

select db_name(dbid) ,segmap,lstart,size/512
from master.dbo.sysusages
order by dbid,lstart

or

select db_name(dbid) 'db_name',segmap,size*(@@maxpagesize/1024)/1024 as 'size' from sysusages

再依序建device和資料庫for load

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

如果ASE開不起來的話
RUNfile最後加上-T3607
不recover master重新啟動ASE

1. Start ASE with treflag -T3607

2. Issue a checkpoint in the master db

3. Issue "shutdown with nowait"

4. Restart the ASE without the -T3607

5. Dump tran master with truncate_only

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()

select spid,db_name(dbid),cmd
from master..sysprocesses
where cmd like 'cmd%'
[where dbid=db_id("資料庫名稱")]

helloworld 發表在 痞客邦 PIXNET 留言(0) 人氣()