Mysql cluster版本主从服务器搭建实践
主从的作用: Mysql的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表。
同步原理:主从数据库同步主要是通过二进制日志来实现同步的。
从 mysql官网下载最新版本: dev.mysql.com
本文环境:
主 mysql服务器: 10.1.68.110
安装版本: mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz
从 mysql服务器: 10.1.68.102
安装版本: mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz
注意:最好是主从服务器采用相同版本,若不行,建议从服务器版本高于主服务器版本。
另外 mysql-5.6.10 版本的主从配置与 mysql-cluster 版本不同,主要是 my.cnf 配置文件不同, startslave 命令也不同,要注意。
本文章两种版本的配置都有记录。
1.1 配置主 mysql服务器
1. 安装主 mysql步骤(参考 tar包中的 INSTALL-BINARY文件即可,很简单)
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> tar zxf mysql-cluster-gpl-7.2.9-linux2.6-x86_64.tar.gz
shell> mv mysql-cluster-gpl-7.2.9-linux2.6-x86_64 /opt/mysql-master
shell> cd /opt/mysql-master
shell> chown -R mysql.mysql *
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
# Next command is optional
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe &
若启动失败,再次尝试一下执行 scripts/mysql_install_db --user=mysql命令后在启动。
# Next command is optional,成功启动了 mysqld之后才会生成下面的脚本文件
shell> cp support-files/mysql.server /etc/init.d/mysql.server
2. 配置主的 my.cnf文件(基本上不需要任何配置,默认都有了)
# vi /etc/my.cnf
关键性的配置
log-bin=mysql-bin
server-id = 1
binlog-do-db=icinga
binlog-do-db=DB2 如果备份多个数据库,重复设置这个选项即可
binlog-do-db=DB3 //需要同步的数据库,如果没有本行,即表示同步所有的数据库
binlog-ignore-db=mysql //被忽略的数据库
保存退出
3. 唯一要做的就是创建允许从服务器访问的帐号 backup
mysql> grant replication slave on *.* to 'backup'@'10.1.68.102' identified by'1234qwer';
Query OK, 0 rows affected (0.00 sec)
若有多台从服务器,就将 ip修改一下执行多次就可以了。
4. 重启主机的 mysql服务。
1.2 配置从 mysql服务器
1. 安装主 mysql步骤(参考 tar包中的 INSTALL-BINARY文件即可,很简单)
略
2. 配置从机的 /etc/my.cnf文件
关键性的配置
log-bin=mysql-bin
server-id = 2
master-host = 10.1.68.110
master-user = backup
master-password = 1234qwer
master-port = 3306
replicate-do-db=icinga
replicate-do-db=DB2
binlog-do-db=DB3 //需要同步的数据库,如果没有本行,即表示同步所有的数据库
binlog-ignore-db=mysql //被忽略的数据库
保存退出
3. 重启从机的 mysql服务,基本的从机配置完成。
4. 若从服务器的偏移量与主机不同,手动修改偏移量
( 1)先查看主机的状态信息
mysql> show master status;
( 2)登录从机按照主的 Position修改从机的 Position
mysql> slave stop;
mysql> change master to master_host='10.1.68.110',master_user='backup',master_password='1234qwer',master_log_file='mysql-bin.000011',master_log_pos=62291;
mysql> slave start;
1.3 验证同步
1. 在 icinga数据库中创建一个表并插入数据
mysql> create table abc(id int,name char(10));
Query OK, 0 rows affected (0.40 sec)
mysql> insert into abc values(1,'shenxiaoran');
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> select * from abc;
2. 查看从 mysql服务器,表及内容是否都同步过来
mysql> show tables;
再查看表内容,数据也都同步了,如下图
至此,mysql数据库主从同步完成。
1.4 常用主从同步的命令
1.4.1 主服务器常用命令
1. 查看主机状态和 Position信息,用来让 slave机与 master保持一致。
mysql> show master status;
1.4.2 从服务器常用命令
mysql> show slave status;
mysql> slave stop;
mysql> slave start;
mysql> show processlist;
2 Mysql-5.6.10版本主从数据库的搭建
部署环境:
OS: CentOS release 6.3 (Final)
主 mysql-master服务器: 192.168.123.75
安装版本: mysql-5.6.10.tar.gz 源码包
从 mysql-slave服务器: 192.168.123.105
安装版本: mysql-5.6.10.tar.gz 源码包
2.1 分别安装主从 mysql-master、 mysql-slave服务器
mysql5.6.10.tar.gz是截至 2013年 4月 10日 mysql官网的最新的源码包版本,该版本的安装方法与传统的 mysql安装方法不同,安装前必须手动安装 cmake
cmake官网下载: http://cmake.org/cmake/resources/software.html
./bootstrap
make
make install
接下来,安装 mysql,我这里写了一个自动安装的 shell脚本
2.2 配置主 mysql-master服务器
Mysql-5.6.10版本的 my.cnf文件默认什么参数都没有,需要自己配
# vi /etc/my.cnf
关键性的配置
log-bin = mysql-bin
# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 106 // 注意新版本用的是下划线
socket = /tmp/mysql.sock
bind-address = 0.0.0.0 // 这里绑定监听0.0.0.0:3306,默认是:::3306
binlog-do-db = cacti // 如果备份多个数据库,重复添加即可,若没有表示备份所有数据库
binlog-do-db = db2
binlog-ignore-db = mysql // 被忽略的数据库,不做复制
保存退出
5. 唯一要做的就是创建允许从服务器访问的帐号 mysync
mysql> grant replication slave on *.* to 'mysync'@'192.168.123.105' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
若有多台从服务器,就将 ip修改一下执行多次就可以了。
6. 重启主机的 mysql服务。
从机测试连接到主 mysql
# bin/mysql -h 192.168.123.75 -u mysync -p123456
mysql>
测试成功连接。
2.3 配置从 mysql-slave服务器
# vi /etc/my.cnf
log_bin = mysql-bin
server_id = 107
注意,下面的参数不能再使用了,否则导致mysql无法启动
master-host = 10.1.68.110
master-user = backup
master-password = 1234qwer
master-port = 3306
1. 登录主服务器的 mysql,查询 master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 120 | cacti | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器 MYSQL,防止主服务器状态值变化
2. 登录从 mysql服务器,配置 binarylog文件和 Position(其实就是主的 binary log文件的大小)与主一致。
mysql> change master to master_host='192.168.123.75',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
3. 查看从 mysql服务器的状态
mysql> show slave status;
重点是查看 Slave_IO_Running | Slave_SQL_Running
如果出现的结果是 Yes | Yes
说明 mysql主从配置成功完成了。
2.4 测试主从服务器同步
1. 将备份后的数据库导入到主 mysql服务器中,查看从 mysql服务器是否会同步。
# bin/mysql < /root/cacti_sql_bak
2. 查看从 mysql服务器的数据库是否有更新
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cacti |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
从上面看到主 mysql服务器的数据库还未全部导入完成,从 mysql服务器已经开始同步了。
3 FAQ
3.1 若 showslave status命令的结果查看正常 ,却依然无法看到同步的数据库,原因在哪?
mysql> show slave status; 执行后部分结果如下
Slave_IO_State :Waiting for master to send event
Slave_IO_Running :Yes
Slave_SQL_Running :Yes
查看数据库却依然无法同步,原因在哪里?
解决办法:
1) 尝试重启master数据库;
2) 在重启slave数据库之前,必须先删除data目录下的master.info文件, 因为 master.info记录了上次要连接主库的信息,如果不删除,即使 my.cnf里进行了修改,手动修改 Position(偏移量)也还是同步不了,因为读取的还是偏移量出错时的 master.info文件信息。
# rm -f data/master.info
# support-files/mysql.server start
Starting MySQL. [ OK ]
再次查看slave,同步终于成功了。
mysql> show processlist;
id|User |Host|db |Command |Time |state
1| systemuser | | NULL |Connect |1196 | Waiting for master to send event
2 | system user | | NULL | Connect |-55692 | Slave has read all relay log;waiting for the slave I/O thread to
3 | root |localhost|icinga| Query| 0|NULL | show processlist
3.2 若 showslave status命令的结果出现下面的异常情况,如何解决?
执行 mysql> show slave status;命令,看到下面的显示结果
Slave_IO_Running:Connecting
Slave_SQL_Running:Yes
看到上面的问题,说明是从服务器无法正常连接到主服务器导致。原因一般和下面几种情况有关:
l Iptables 防护墙阻止了3306端口
l 主mysql服务器的grant授权命令有误
l 主mysql服务器的监听端口不是0.0.0.0:3306,导致别的服务器无法连接到主mysql
解决办法:
首先,关闭了iptables;
然后,检查主mysql服务器的grant授权命令,正确无误,这一点排除。
其次,查看主mysql的监听端口,默认是:::3306,不知道是否因为这个问题导致
修改主服务器的my.cnf文件,添加下面语句
bind-address = 0.0.0.0
重启mysq.server服务
再次netstat –an|more 查看3306端口,出现了0.0.0.0:3306,说明修改成功。
登录到从mysql服务器上,远程连接
# bin/mysql -h 192.168.123.75 -umysync -p123456
Your MySQL connection id is 8
Server version: 5.6.10-log Source distribution
mysql>
连接成功。
最后重新执行主从操作:
主mysql服务器:mysql> show master status;
从mysql服务器:mysql> stop slave;
从mysql服务器:mysql> change master to……;
从mysql服务器:mysql> start slave;
从mysql服务器:mysql> show slave status;
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
再次测试主从同步,成功。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com