MySQL AB复制及簇群集

 

名称
角色
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 /opt/test.sql [email protected]: ./
[root@localhost ~]# scp /etc/my.cnf [email protected] : ./   // mysql 配置文件拷贝到 Slave 上,修改
scp test.sql [email protected] : ./ (将 test.sql 复制到 Slave /root 目录下)
至此 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 保持同步就为成功。
 
 
 
 
 
 
 
 

你可能感兴趣的:(mysql,数据库,安装)