例如:

A192.168.1.200

B192.168.1.210

1MySQL AB配置:

配置文件my.ini

[mysqld]

# The TCP/IP Portthe MySQL Server will listen on

port=3306

找到以上配置,之后添加以下配置

server-id=200#服务器唯一标识,AB中的id不能相同

log-bin=mysql-bin#同步事件的日志记录文件,可以指定路径如:”c:/mysql/binlog.txt” 

binlog-do-db=test1#提供数据同步服务的数据库

binlog-do-db=test2#提供数据同步服务的数据库

replicate-do-db=test1#同步的数据库

replicate-do-db=test2#同步的数据库

replicate-ignore-db=mysql(不同步mysql库,不需要是这一项可以不添加)

2*配置好后,重启A,B MySQL服务!!!

可以在dos中输入命令net stop mysql net start mysql 

也可以在任务管理器中重启mysql

linux下ssh中输入service mysqld stop

3)登录ABmysql,然后分别执行下面命令:(A,B互相给予访问权限)

(远程访问用户名)mysql登陆账户要建立同步的对方IP 本地mysql登陆密码,也就是双方要有对方的账户呗

mysql>grant allprivileges on *.* to root@'192.168.1.210' identifiedby 'root'

mysql> Flushprivileges;

grantall privileges on *.* to root@"%" identified by "root";

一般使用以上命令,“%”给所有用户给予权限;因为单独给权限时,tomcat集群会出现部分数据查询不到。

允许A服务器用户rootip192.168.1.210的主机连接到B服务器,并使用B服务器的mysql登陆密码’root’.

*.*表示所有数据库,如果要对某个数据库备份的话,假如数据库名称为some

则要换成some.*

4)在ABmysql中输入命令:

先停止从服务器同步服务

mysql> stopslave;

改变当前主服务器(即远程访问用户)IPmysql用户名,mysql密码,mysql端口号;网上将这些主服务器的信息添加至my.ini配置中,经过多台pc机测试,无法重新启动mysql,故采用mysql命令输入方式,可行,但前做的是主主,故master_host=要互相知道,也就是填对方的地址

mysql>changemaster to master_host='192.168.1.210',master_user='root',master_password=‘root'

,master_port=3306;

启动从服务器同步服务

mysql> startslave;

检查是否配置成功

mysql>showslave status\G

找到Slave_IO_Running: YESSlave_SQL_Running: YES;此两项为yes则同步成功

5)如果Slave_IO_Running:NO

1、先查看A,B服务器IP能否ping

2AB服务器用户名、密码是否正确

3AB服务器的防火墙是否关闭

4AB服务器是否相互授权

以上状态有一项不符,修改完后从第2步开始继续操作。

如果Slave_SQL_Running:NO时,可以做以下操作

mysql> stopslave;

mysql>setGLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> startslave;

然后输入 show slave status\G 命令,如果还是Slave_SQL_Running:NO

查看error信息是否有变化,有变化则继续输入上面命令,直到Slave_SQL_Running:YES


原因:
a.程序可能在slave上进行了写操作
b.也可能是slave机器重起后,事务回滚造成的.

解决办法2:
a.首先停掉Slave服务:slave stop

b.到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000020 | 135617781 | | |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)

3.到slave服务器上执行手动同步:
mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3307,
> master_log_file='mysql-bin.000020',
> master_log_pos=135617781;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0

解决办法II:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;

 

自己的使用体会:方法一是强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用.方法二不一定会有效果.


 

keelalived实现mysql单点故障

官网下载地址:http://www.keepalived.org/software

1)安装:

#wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz(我们测试的是1.2.9)

#tar -zxvf keepalived-1.2.7.tar.gz

#cd keepalived-1.2.7

#./configure --prefix=/usr/local/keepalived

预编译后出现:

Keepalived configuration

------------------------

Keepalived version       : 1.2.7

Compiler                 : gcc

Compiler flags           : -g -O2 -DETHERTYPE_IPV6=0x86dd

Extra Lib                : -lpopt -lssl -lcrypto 

Use IPVS Framework       : Yes

IPVS sync daemon support : Yes

IPVS use libnl           : No

Use VRRP Framework       : Yes

Use VRRP VMAC            : No

SNMP support             : No

Use Debug flags          : No

注意如果你没有用到LVS可以把lvs去掉即--disable-lvs-syncd --disable-lvs

#make && make install

整理管理文件:

#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

建立配置文件目录(注意:keepalived的配置文件默认在/etc/keepalived/目录)

#mkdir /etc/keepalived

两台服务器(两个节点)都这样安装即可

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 global_defs {
 notification_email {
 admin@ajcheng.com
 }
 notification_email_from admin@ajcheng.com
 smtp_server 127.0.0.1
 smtp_connect_timeout 30
 router_id MySQL-ha

}
 vrrp_instance VI_1 {
 state BACKUP   #两台配置此处均是BACKUP
interface eth0 #网卡什么都不用配置,这边会自动生成虚拟IP
 virtual_router_id 61
 priority 100   #优先级,另一台改为90
 advert_int 1

nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置

authentication {
 auth_type PASS
 auth_pass 111
 }
 virtual_ipaddress {
 192.168.1.86
 }
 }
 virtual_server 192.168.1.86 3306 {
 delay_loop 2   #每个2秒检查一次real_server状态
lb_algo wrr   #LVS算法
lb_kind DR    #LVS模式
persistence_timeout 60   #会话保持时间
protocol TCP

real_server 192.168.1.83 3306 {
 weight 3
 notify_down /root/mysql.sh  #检测到服务down后执行的脚本
TCP_CHECK {
 connect_timeout 10    #连接超时时间
nb_get_retry 3       #重连次数
delay_before_retry 3   #重连间隔时间
connect_port 3306   #健康检查端口
}
 }

}

 

 

vim /usr/local/mysql/bin/mysql.sh

#!/bin/sh
 pkill keepalived

service network restart

 

chmod -R 777 /usr/local/mysql/bin/mysql.sh

chkconfig keepalived on

service keepalived start

service keepalived stauts

ip add

如果在其中一台机子上看到了VIP 192.168.1.86,且在局域网内能ping通,通过Navicat能过连上,说明ok了!