环境rh6.2
mysql5.6.20-rh6-V46610-01.zip
keepalived-1.2.7.tar.gz
192.168.10.10 node1
192.168.10.20 node2
192.168.10.100 vip
删除自带mysqlyum remove mysql mysql-server mysql-libs mysql-server;
删除残留文件find / -name mysql
安装mysql --只安装以下三个就可以MySQL-client-advanced
MySQL-devel-advanced
MySQL-server-advanced
复制mysql配置文件cp /usr/share/mysql/my-default.cnf /etc/my.cnf
初始化mysql/usr/bin/mysql_install_db --user=mysql --basedir=/web/app/mysql/ --datadir=/web/app/mysql/data/
vi /etc/init.d/mysqld #免编译默认把配置文件/usr/local/mysql修改默配置路径,要不就无法启动
basedir= 修改为 basedir=/web/app/mysql
datadir= 修改为 datadir=/web/app/mysql/data
修改root密码service mysql start #启动MySQL
cat /root/.mysql_secret #查看root账号的初始密码
mysql -uroot -pZFRmqNPoFH3aO5PU #使用root账号登陆MySQL
set password=password('123456'); #更改MySQL密码
mysql -uroot -p123456 #使用新密码登陆
select host,user,password from user;
设置开机启动chkconfig mysql on
设置字符集vi /etc/my.cnf
[mysqld]
user = mysql
log-bin=mysql-bin
server-id= 2 --各节点不能相同
binlog-do-db=test --要记录日志的数据库
binlog-ignore-db=mysql --忽略记录日志的数据库,多个用,隔开
replicate-do-db=test --从库同步数据库名称
replicate-ignore-db=mysql --从库忽略同步数据库名称
log-slave-updates --如果一个master挂掉,另一个master马上接管
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2 --按节点数个数设置
auto_increment_offset=2 --按节点编号设置,为了防止auto_increment冲突
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
max_connections=1000
[client]
default-character-set = utf8
配置互备node1:
vi /etc/my.cnf
[mysqld]
server-id =1
log-bin=mysql-bin
binlog_format=mixed
grant replication slave on *.* to root@192.168.10.20 identified by 'mysql'; --给备节点node2的指定用户授权
change master to master_host='192.168.10.20', master_user='root', master_password='mysql', master_log_file='mysql-bin.000005', master_log_pos=107; --给主节点node2的指定用户授权
/etc/init.d/mysqld restartnode2:
vi /etc/my.cnf
[mysqld]
server-id =2
log-bin=mysql-bin
binlog_format=mixed
grant replication slave on *.* to root@192.168.10.10 identified by 'mysql'; --给备节点node1的指定用户授权
change master to master_host='192.168.10.10', master_user='root', master_password='mysql', master_log_file='mysql-bin.000005', master_log_pos=107; --给主节点node1的指定用户授权
/etc/init.d/mysqld restart
初始化数据如果主数据库有数据的话
数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK ;
用命令mysqldump备份数据库。
在master服务器执行
shell> mysqldump -uroot -p123456 --master-data --opt rock > backup-file.sql
看主数据库的状态mysql> show master status;
记录File 和Position 项的值
从数据库
stop slave; --关闭slave自动同步
mysqladmin -uroot -p123456 create rock --创建数据库
mysql -uroot -p123456 test1 < backup-file.sql --导入主节点导出的数据
启动从服务器线程
mysql>start slave;
取消主数据库锁定mysql>UNLOCK TABLES;
设置同步位置,两个节点同样设置在source那边,执行:
flush logs;
show master status;
记下File, Position。
在target端,执行:
stop slave;
CHANGE MASTER TO MASTER_LOG_FILE='testdbbinlog.000008',MASTER_LOG_POS=107;
start slave;
show slave status \G
一切正常。
查看并修改节点server_idshow variables like '%id%';
set global server_id=2 ;
查看复制进程,主节点操作show processlist \G;
配置keepalivedtar -zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure --prefix=/data/app/keepalived/
make &&make install
ln -s /data/app/keepalived/sbin/keepalived /usr/sbin/keepalived
mkdir -p /etc/keepalived
设置配置文件vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
localhost@test.com
}
notification_email_from localhost@test.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MySQL-ha
} --global_defs可以不设置
vrrp_instance VI_1 {
state BACKUP #两台配置此处均是BACKUP
interface eth0 #通信协议用的网卡口
virtual_router_id 51
priority 100 #优先级,另一台改为90
advert_int 1
nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 3306 { #MySQL-Vip地址
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #会话保持时间
protocol TCP #通信协议
real_server 192.168.10.10 3306 { #本机mysql地址
weight 3
notify_down /usr/local/MySQL/bin/MySQL.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
tips:slave 的keepalived.conf配置文件和master配置文件只有三点不同:
real_server要修改成本机的
不要需要配置抢占参数nopreempt
优先级为90,比master要低
编辑MySQL.sh脚本,当mysql服务down后,执行该脚本echo "pkill keepalived" >/usr/local/bin/MySQL.sh
chmod +x /usr/local/bin/MySQL.sh
给mysql赋权限mysql> grant all privileges on *.* to 'root'@'%' identified by 'test';
mysql> flush privileges;
设置开机启动keepalived服务/data/app/keepalived/sbin/keepalived start
测试两节点是否都能ping通vip地址192.168.10.100
两节点分别通过vip连接数据库,先后停各个节点的数据库,看所有节点连接数据库是否正常