名称
|
角色
|
IP地址
|
mysql-master
(
RHEL5)
|
主
|
Eth0:192.168.1.1
|
mysql-slave
(RHEL5)
|
从
|
Eth0:192.168.1.2
|
MySQL
实验一:(
MySQL A/B
复制试验)
此实验所用版本(RHEL5.5
)制作
1.
基础安装mysql.
首先干净的系统,不是干净的系统不要紧,反正自己搞明白就行了。
在Master
上安装mysql.
[root@localhost ~]# mount /dev/cdrom /media/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch – Debug
baseurl=file:///media/Server
enabled=1
gpgcheck=0
[root@localhost ~]# yum -y install mysql*
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# service mysqld start
[root@localhost ~]# mysqladmin -uroot password
“123
” //
设置root
密码
Slave
上同样方式安装
mysql
,并做如上操作
2.Master
上
mysql
的设置。
在这里我就用
test
数据库来做测试,在
test
数据库里新建一个
data
表,并添加一些数据,具体操作如下:
[root@localhost ~]# mysql -uroot -p123
mysql> use test;
Database changed
mysql> create table data(name varchar(20),address varchar(50),phone varchar(20));
Query OK, 0 rows affected (0.04 sec)
mysql> insert into data(name,address,phone)values('zhangsan','beijing','123123');
Query OK, 1 row affected (0.00 sec)
mysql> select * from data;
+----------+---------+--------+
| name | address | phone |
+----------+---------+--------+
| zhangsan | beijing | 123123 |
+----------+---------+--------+
1 row in set (0.00 sec)
设置数据库同步帐户:
mysql> grant replication slave,replication client,reload,super on *.* to [email protected] identified by '123';
Query OK, 0 rows affected (0.00 sec)
(
授与从
192.168.1.2
主机上登录用户
backup
数据复制权限,
4.02
版本以前用:
GRANT FILE ON *.* TO
[email protected]
IDENTIFIED BY ‘123’;)
mysql> flush privileges; //
使权限立即生效
Query OK, 0 rows affected (0.01 sec)
mysql> use mysql; //
切换到
mysql
数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select user,host from user; //
查看新建用户
+--------+-----------------------+
| user | host |
+--------+-----------------------+
| root | 127.0.0.1 |
| backup | 192.168.1.2 |
| | localhost |
| root | localhost |
| | localhost.localdomain |
| root | localhost.localdomain |
+--------+-----------------------+
6 rows in set (0.00 sec)
mysql> exit
Bye
修改
mysql
主配置文件
/etc/my.conf
在
[mysqld]
中加入以下内容
[root@localhost ~]# service mysqld stop //
先停止
MYSQL ,
修改完毕后启用
停止
MySQL
:
[
确定
]
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
添加如下行:当自己作为服务端同步时,与客户端之间同步的设置信息
server-id=1
//
设置服务器的
ID
号
log-bin
//
设置同步
log
binlog-do-db=test
//
设置同步数据库
max_binlog_size=104857600
//
设置同步
log
最大
size:104857600
字节
replicate-same-server-id
//
在复制过程中同步相同的
master id
号
当自己作为客户端同步时,与主机之间同步的设置信息
master-host=192.168.1.2
//
主机
IP
master-user=backup
//
登陆服务端的账户名
master-password=123
//
登陆服务端的账户密码
master-port=3306
//
服务端打开的端口
master-connect-retry=60
//
与服务端断点重试间隔为
60
秒
replicate-do-db=test
//
表示同步
test
数据库
binlog-ignore-db=mysql
//
设置不同步的数据库
[root@localhost ~]# service mysqld restart //
启用
Mysql
停止
MySQL
:
[
失败
]
启动
MySQL
:
[
确定
]
备份
test
数据库
[root@localhost ~]# mysqldump -uroot -p123 test > /opt/test.sql
[root@localhost ~]# scp /etc/my.cnf
[email protected]
: ./ //
将
mysql
配置文件拷贝到
Slave
上,修改
至此
Master
服务器上有关
mysql
的设置已完成,下一步开始配置
Slave
设置
Slave
设置数据库同步帐户:
设置
Slave
设置数据库同步帐户:
[root@localhost ~]# mysql -uroot -p123 test < test.sql //
倒入
test
数据库中内容
[root@localhost ~]# mysql -uroot -p123
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| data |
+----------------+
1 row in set (0.00 sec)
设置数据库同步帐户:
mysql> grant replication slave,replication client,reload,super on *.* to [email protected] identified by '123';
Query OK, 0 rows affected (0.01 sec)
(
授与从
192.168.1.2
主机上登录用户
backup
数据复制权限,
4.02
版本以前用:
GRANT FILE ON *.* TO
[email protected]
IDENTIFIED BY
‘
123
’
;)
mysql> flush privileges; //
使权限立即生效
Query OK, 0 rows affected (0.01 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select user,host from user;
+--------+-----------------------+
| user | host |
+--------+-----------------------+
| root | 127.0.0.1 |
| backup | 192.168.1.1 |
| | localhost |
| root | localhost |
| | localhost.localdomain |
| root | localhost.localdomain |
+--------+-----------------------+
6 rows in set (0.00 sec)
mysql> exit
Bye
修改
mysql
主配置文件
/etc/my.conf
在
[mysqld]
中加入以下内容
[root@localhost ~]# service mysqld stop //
先停止
MYSQL ,
修改完毕后启用
停止
MySQL
:
[
确定
]
[root@localhost ~]# cp my.cnf /etc/my.cnf //
将从
Master
上拷贝到
/root
下的
mysql
配置文件拷贝到
/etc
下,
修改文件中蓝色部分
cp
:是否覆盖“
/etc/my.cnf
”
? y
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
添加如下行:当自己作为服务端同步时,与客户端之间同步的设置信息
server-id=
2
//
设置服务器的
ID
号
log-bin
//
设置同步
log
binlog-do-db=test
//
设置同步数据库
max_binlog_size=104857600
//
设置同步
log
最大
size:104857600
字节
replicate-same-server-id
//
在复制过程中同步相同的
master id
号
当自己作为客户端同步时,与主机之间同步的设置信息
master-host=
192.168.1.1
//
主机
IP
master-user=backup
//
登陆服务端的账户名
master-password=
123
//
登陆服务端的账户密码
master-port=3306
//
服务端打开的端口
master-connect-retry=60
//
与服务端断点重试间隔为
60
秒
replicate-do-db=test
//
表示同步
test
数据库
binlog-ignore-db=mysql
//
设置不同步的数据库
[root@localhost ~]# service mysqld restart //
启用
Mysql
停止
MySQL
:
[
失败
]
启动
MySQL
:
[
确定
]
在
Master
和
Slave
上分别重启
mysql
服务
[root@localhost ~]# service mysqld restart
停止
MySQL
:
[
确定
]
启动
MySQL
:
[
确定
]
You have mail in /var/spool/mail/root
进入数据库,分别查询配置
[root@localhost ~]# mysql -uroot -p123
Mysql>show master status;
mysql>show slve status\G;
mysql>show processlist G;
Show Slave status:
此处
Slave_IO_Running ,Slave_SQL_Running
都应该是
yes,
表示从库的
I/O,Slave_SQL
线程都正确开启
.
在
Mysql
中可通过以下命令来查看主从状态
show master status
查看
master
状态
show slave status
查看
slave
状态
show processlist G
查看当前进程
stop slave
暂时停止
slave
进程
start slave
开始
slave
进程
在
Master
服务器上
MySQL
命令符下输入:
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000004 | 98 | test | mysql |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.1.2
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 98
Relay_Master_Log_File:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 98
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
ERROR:
No query specified
表示正常!
到此mysql
的双机互备已基本完成,在两台服务器的mysql
数据库中任意添加数据,都可以同步到对端服
mysql> show processlist\G;
*************************** 1. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 422
State: Connecting to master
Info: NULL
*************************** 2. row ***************************
Id: 3
User: system user
Host:
db: NULL
Command: Connect
Time: 422
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 6
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
3 rows in set (0.00 sec)
ERROR:
No query specified
mysql> exit
Bye
在Slave
上做同样的操作,发现两个Yes
则正常
===============================================================
查看状态
及调试
1,
查看master
的状态SHOW MASTER STATUS; Position
不应为0
2,
查看slave
的状态show slave status; Slave_IO_Running | Slave_SQL_Running
这两个字段应为YES|YES. show processlist;
会有两条记录与同步有关state
为Has read all relay log; waiting for the slave I/O thread to update it
和s Waiting for master to send event .
3,
错误日志
MySQL
安装目录
\data\Hostname.err
4,CHANGE MASTER TO
如果
A
的
Slave
未启动
,Slave_IO_Running
为
No.
可能会是
B
的
master
的信息有变化
,
查看
B SHOW MASTER STATUS;
记录下
File,Position
字段
.
假设为
'mysql_binary_log.000004',98 ;
在
A
下执行
:
Stop Slave;
CHANGE MASTER TO
MASTER_LOG_FILE = 'mysql_binary_log.000004',
MASTER_LOG_POS = 98 ;
Start Slave;
5,SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n;
如果A
的Slave_SQL_Running
为No.
Err
文件中记录:
Slave: Error 'Duplicate entry '1' for key 1' on query....
可能是master
未向slave
同步成功,
但slave
中已经有了记录。造成的冲突.
可以在A
上执行
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n;
跳过几步。再
restart salve;
---------------------------------------------------------------------------------------------------------------------------------
MySQL
实验二:(
MySQL
簇群集实验)
名称
|
角色
|
IP地址
|
mysql-server
(
RHEL5)
|
mysql管理节点
|
Eth0:192.168.6.100
|
mysql-节点
(RHEL5)
|
数据节点1
|
Eth0:192.168.6.110
|
mysql-节点
(RHEL5)
|
数据节点2
|
Eth0:192.168.6.120
|
此实验所用版本(RHEL5.5
)制作
实验步骤:
一、
MySQL
管理节点配置
1
) 设置网卡
IP
地址
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:68:97:cd
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.6.100
GATEWAY=192.168.6.1
TYPE=Ethernet
2
) 从网址
http://www.mysql.com/downloads/cluster#downloads
上下载一个版本为
mysql-cluster-gpl-7.1.3-linux-i686-glibc23.tar.gz
之后解压缩使用,这里下载到了
/root
目录下。
[root@localhost aaa]# ls
mysql-cluster-gpl-7.1.9a-linux-i686-glibc23.tar.gz
[root@localhost aaa]# tar zxvf mysql-cluster-gpl-7.1.9a-linux-i686-glibc23.tar.gz -C /usr/local/
[root@localhost aaa]# cd /usr/local/
[root@localhost local]#mv mysql-cluster-gpl-7.1.9a-linux-i686-glibc23/ mysql/
[root@localhost local]# groupadd mysql
//
创建
mysql
所属组
[root@localhost local]# useradd -g mysql -s /sbin/nologin -M mysql
//
创建
mysql
程序用户
在
MySQL
数据节点
1
及
2
上分别做如上操作。
3
) 为
MySQL
管理节点服务器做安装后调整:
[root@localhost mysql]# scripts/mysql_install_db --user=mysql
//
初始
MySQL
数据库
[root@localhost mysql]# cd ..
[root@localhost local]# chown -R mysql:mysql mysql/
//
更改
mysql
目录的属主,属组
[root@localhost local]# cp mysql/support-files/my-medium.cnf /etc/my.cnf
//
复制
mysql
配置文件到
/etc
如果需要将
Mysql
管理节点服务器也当做一台群集节点,则作如下操作
[root@localhost local]# vi /etc/my.cnf
ndbcluster //
定位管理节点
ndb-connectstring=192.168.6.100
[ndbd] //
群集节点
connect-string=192.168.6.100
[ndb_mgm] // ndb_mgm
它可以用来监控群集的运行情况,其实就是一个
mysql
集群的管理工具
connect-string=192.168.6.100
[ndb_mgmd] //
集群控制文件的位置
config-file=/var/lib/mysql-cluster
并在下面将要创建的
/var/lib/mysql-cluster
中的
config.ini
配置文件中多添加一个
[MYSQLD]
4
) 为
MySQL
管理节点服务器建立配置文件:
[root@localhost local]# mkdir /var/lib/mysql-cluster
//
创建
mysql
管理节点文件
[root@localhost local]# chown -R mysql:mysql /var/lib/mysql-cluster/
//
更改文件属主,属组
[root@localhost local]# cd /var/lib/mysql-cluster/
[root@localhost mysql-cluster]#
vi config.ini
//
注意:以下输入不能错半个字符
[NDBD DEFAULT]
//
设置集群中每个表保存的副本数,这里有
2
个数据节点,那么每个点则保存一个副本
NoOfReplicas=2
[NDB_MGMD]
//
设置管理节点
HostName=192.168.6.100
DataDir=/var/lib/mysql-cluster
[NDBD]
//
设置集群节点
1
HostName=192.168.6.110
DataDir=/var/lib/mysql-cluster
[NDBD]
//
设置集群节点
1
HostName=192.168.6.120
DataDir=/var/lib/mysql-cluster
[MYSQLD]
//SQL
数据节点
[MYSQLD]
[MYSQLD] //
如果管理节点本身也当做一台
DNB
群集节点,则添加此行,否则不用添加
5
) 对上述操作保存退出后,启动管理节点服务器
[root@localhost ~]# ln -s /usr/local/mysql/bin/* /usr/bin/
//
建立软连接,打命令是不用打绝对路径
[root@localhost ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
//
启用管理节点
MySQL Cluster Management Server mysql-5.1.51 ndb-7.1.9
2012-05-02 07:11:05 [MgmtSrvr] INFO -- The default config directory '/usr/local/mysql/mysql-cluster' does not exist. Trying to create it...
2012-05-02 07:11:05 [MgmtSrvr] INFO -- Sucessfully created config directory
二、
MySQL
数据节点
1
上的配置
在
MySQL
数据节点
1
和
2
中都需要进行如下改动:
1
)安装后对
MySQL
的调整
[root@localhost mysql]# cd /usr/local/mysql/
[root@localhost local]# cd mysql/
[root@localhost mysql]# scripts/mysql_install_db --user=mysql
//
初始化
MYSQL
数据库
[root@localhost mysql]# cd ..
[root@localhost local]# chown -R mysql:mysql mysql/
[root@localhost local]# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
[root@localhost local]# vi /etc/my.cnf
[mysqld]
.....
ndbcluster //
定位管理节点
ndb-connectstring
=
192.168.6.100 //
“
=
”此等号两旁有空格
在本文最后追加
[mysql_cluster] //
定位
mysql
集群的管理节点
ndb-connectstring=192.168.6.100
修改完毕后保存退出。
[root@localhost local]# mkdir /var/lib/mysql-cluster
[root@localhost local]# chown mysql:mysql /var/lib/mysql-cluster/
[root@localhost local]# ln -s /usr/local/mysql/bin/* /usr/bin/
[root@localhost local]# ndbd --initial
2012-05-02 07:24:24 [ndbd] INFO -- Angel connected to '192.168.6.100:1186'
2012-05-02 07:24:24 [ndbd] INFO -- Angel allocated nodeid: 2
[root@localhost local]# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@localhost local]# chkconfig --add mysqld
[root@localhost local]# service mysqld start
Starting MySQL... [
确定
]
[root@localhost local]# echo "/usr/local/mysql/bin/ndbd" >> /etc/rc.local
注意:可以把
/usr/local/mysql/bin/ndbd
加到
/etc/rc.local
中实现开机启动。另外,只有在第一次启动或者对管理节点的
config.ini
进行改动后才需要使用
--initial
参数,平时启动就不需要使用该参数了。
2
)
MySQL
数据节点
2
上的配置和数据节点
1
一样。
三、测试
回到
MySQL
数据库管理节点上,并启动管理终端:
[root@localhost ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.6.100:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.6.110 (mysql-5.1.51 ndb-7.1.9, Nodegroup: 0, Master)
id=3 @192.168.6.120 (mysql-5.1.51 ndb-7.1.9, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.6.100 (mysql-5.1.51 ndb-7.1.9)
[mysqld(API)] 2 node(s)
id=4 @192.168.6.110 (mysql-5.1.51 ndb-7.1.9)
id=5 @192.168.6.120 (mysql-5.1.51 ndb-7.1.9)
如果上面没有问题,现在就开始测试
MySQL
群集节点:
登录节点
1,
进入
mysql
控制界面并创建数据库
aaa
[root@localhost local]# mysql
mysql> create database aaa;
Query OK, 1 row affected (0.16 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| mysql |
| ndbinfo |
| test |
+--------------------+
5 rows in set (0.00 sec)
登录节点
2,
进入
mysql
控制界面并查看是否同步数据库
aaa
[root@localhost local]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| mysql |
| ndbinfo |
| test |
+--------------------+
5 rows in set (0.06 sec)
如果同步成功,证明本次试验成功,大家可以尝试,在节点
2
上删除数据库,或者新创建数据库,并在里面创建表及数据结构,插入数据后,在节点
1
上查看,如果和节点
2
保持同步就为成功。