Mysql-cluster環境配置
硬件環境
4台機器
192.168.1.10 管理節點
192.168.1.11 存儲節點 SQL節點
192.168.1.12 存儲節點、SQL節點
192.168.1.13 SQL節點
軟件環境:
操作系統:CentOS 6 .5(64位)
Mysql版本:MySQL-Cluster-gpl-7.3.5-1.el6.x86_64.rpm-bundle.tar
mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz(需要其中的兩個文件)
安裝准備:
1. 解壓MySQL-Cluster-gpl-7.3.5-1.el6.x86_64.rpm-bundle.tar:
將解壓后的MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm分發至每台機器;
將解壓后的MySQL-Cluster-client-gpl-7.3.5-1.el6.x86_64.rpm分發至SQL節點;
2. 清理舊的Mysql安裝:
yum -y remove mysql
rpm -qa | grep mysql*
對於找到的1個剩余mysql包,請按照如下的命令格式予以刪除:
rpm -e --nodeps mysql-libs-5.1.61-4.el6.x86_64
3. 安裝依賴庫:
yum -y install libaio
安裝MySQL Cluster:
創建文件夾(分如下3個類來創建對應的文件夾)
存儲節點:mkdir /var/lib/mysql/data
管理節點:mkdir /var/lib/mysql-cluster SQL節點:可不用 文件夾授權
進程DIR: mkdir /var/run/mysqld
使用如下的命令來變更權限保證可寫入:
chmod -R 1777 /var/lib/mysql
chmod -R 1777 /var/run/mysqld
chmod -R 1777 /var/lib/mysql-cluster
1. 在每台機器上安裝MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
執行命令:rpm -Uvh MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
安裝后會提示默認密碼存放在/root/.mysql_secret文件中(也有時候不提示)
2. 在SQL節點上安裝MySQL-Cluster-client-gpl-7.3.5-1.el6.x86_64.rpm
執行命令:rpm -Uvh MySQL-Cluster-client-gpl-7.3.5-1.el6.x86_64.rpm
配置管理節點:
- 解壓mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz,進入其
mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64\bin目錄找到ndb_mgm和ndb_mgmd,將其復制到管理節點的/usr/local/bin,
然后使這兩個文件成為可執行的:
cd /usr/local/bin
chmod +x ndb_mgm*
- 在管理節點上執行:
cd /var/lib/mysql-cluster
vi config.ini
內容如下:
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=20M
[ndb_mgmd]
# Management process options:
hostname=192.168.1.10 # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster # Directory for MGM node log files
[ndbd]
HostName=192.168.1.11
DataDir=/var/lib/mysql/data
[ndbd]
HostName=192.168.1.12
DataDir=/var/lib/mysql/data
[mysqld]
HostName=192.168.1.11
[mysqld]
HostName=192.168.1.12
[mysqld]
HostName=192.168.1.13
配置存儲節點和SQL節點:
在所有存儲節點和SQL節點上建立配置文件:
vi /etc/my.cnf
內容如下:
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
max_connections=100
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
ndbcluster
ndb-connectstring=192.168.1.10
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.1.10
~
啟動各個節點:
注意順序。
- 啟動管理節點:ndb_mgmd -f /var/lib/mysql-cluster/config.ini
(需要在管理節點執行,這會創建一個目錄/usr/local/mysql/mysql-cluster,沒有的話可能報錯,就自己手動創建一個
mkdir /usr/local/mysql
mkdir /usr/local/mysql/mysql-cluster)
2. 啟動存儲節點:ndbd --initial
(需要在存儲節點執行) 初次啟動時需要加--initial參數,以后只需要執行ndbd即可;
3. 啟動SQL節點:nohup mysqld_safe --explicit_defaults_for_timestamp &
(需要在SQL節點執行)
啟動之前,需要先檢查其3306端口是否被占用,sudo netstat -anp | grep 3306 查看3306端口是否被占用
如果被占用需要kill掉,然后再啟動
檢查所有節點是否正常啟動:
在管理節點中執行ndb_mgm 進入集群管理console,使用show命令列出所有節點信息:
可以看到sql節點沒有啟動成功,解決方法:
cd /var/lib/mysql
ls
rm -f ib* (刪除掉lb開頭的文件)
用命令:sudo netstat -anp | grep 3306 查看3306端口是否被占用
如果被占用kill殺掉
然后重新啟動執行上面操作看到
常用命令:
1) ndb_mgmd管理命令:ndb_mgm
執行之后就是管理控制台了,里面可以繼續輸入命令。
查看集群里面的全部節點的狀態:show
2) 停止集群服務器的命令:ndb_mgm -e shutdown
如果集群配置有更新了:rm /usr/mysql-cluster/ndb_1_config.bin.1
3) 停止SQL節點的命令:mysqladmin -uroot shutdown
4) SQL Node上連接MySQL:mysql -u root –pPASSWORD
執行之后就是MySQL控制台了,里面可以繼續輸入命令。
修改root用戶密碼:
在每個SQL節點中執行:
mysqladmin -u root -pOLDPASSWORD password 'newpassword'
其中OLDPASSWORD為/root/.mysql_secret中生成的:
cat /root/.mysql_secret (查看隨機生成的密碼)
# The random password set for the root user at Tue Apr 15 11:08:59 2014 (local time): Nnqn0u1MRcpXkMue
測試集群:
在192.168.1.12上登錄
mysql -u root –ppassword
mysql> create database transenly;
Query OK, 1 row affected (0.06 sec)
mysql> use transenly;
Database changed
mysql> CREATE TABLE ctest2 (i INT) ENGINE=NDB;(創建表的時候必須加上后面的ENGINE=NDB,不然數據同步不成功)
Query OK, 0 rows affected (0.38 sec)
在192.168.1.11上登錄
mysql -u root –ppassword
可以看到數據庫和數據表都有了,說明數據同步成功
數據導入使用sql文件導入
將sql文件放入到本地的一個地方,如/var/lib/mysql/data/
其中需要將sql文件中 ENGINE= InnoDB修改為ENGINE-NDB,保證數據同步的
在其中隨意一個sql節點登錄
mysql -u root –ppassword
use transenly;(使用的數據庫,前提是先創建好數據庫)
source /var/lib/mysql/data/transenly.sql
出現Query OK, 0 rows affected (0.00 sec)說明導入成功
然后show tables;查看三個sql節點是否都創建成功
項目連不上數據庫:
需要修改權限,是服務器可以隨便訪問
mysql> grant all privileges on *.* to root@'%' identified by 'mysql' with grant option;
//賦予任何主機訪問數據的權限
3、mysql>FLUSH PRIVILEGES //修改生效
4、mysql>EXIT //退出MySQL服務器