mysql主从配置&&基于keepalived的主备切换

mysql互为主从设置 && 主备切换配置

需求说明:

1.公司架构一直是一台单独的mysql在线上跑,虽然一直没有出现什么宕机事件,但是出于一个高可用的考虑,提出主从备份、主备切换的需求;

2.实现这个需求的前一段时间只是在做数据库备份的时候实现了主从热备,为了实现主备切换功能,继续操作上述需求;

实验环境:

master1:10.1.156.3:3306

master2:10.1.156.5:3306

my.cnf配置文件关于主从这块的修改:

master1:

server-id = 1 #主备id值一定要不同,而且sql语句不能写成死循环,防止主备设置陷入

log-bin=mysqlmaster-bin

#binlog-do-db = cad #指定需要进行主从的数据库

binlog_cache_size = 4M

binlog_format=mixed

expire_logs_days=3

binlog-ignore-db=test #不记录test库的binlog

replicate-ignore-db=test #不复制test库的binlog

sync_binlog=1

sql_mod=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

lower_case_table_names=1

master2:

server-id = 2

log-bin=mysqlslave-bin

#binlog-do-db = cad #指定需要进行主从的数据库

binlog_cache_size = 4M

binlog_format=mixed

expire_logs_days=3

binlog-ignore-db=test #不记录test库的binlog

replicate-ignore-db=test #不复制test库的binlog

sync_binlog=1

sql_mod=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

lower_case_table_names=1

主从配置:

1.实现从master1-->master2的单向主从配置:

master1:1)创建同步的账号:(ip地址从mysql:master2所属IP)

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave‘@‘10.1.156.5‘ IDENTIFIED BY ‘test2015‘;

Query OK, 0 rows affected (0.13 sec)

mysql> flush privileges;

2)查看master1的master状态,获取二进制日志名和偏移量

mysql> show master status\G

*************************** 1. row ***************************

File: mysqlmaster-bin.000004

Position: 396

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

(备注:show master statusG; 报错ERROR: No query specified 属于语法错误)

3)主mysql(master1)停止数据库操作,对数据库进行导出操作,然后导入到从mysql(master2)

#首先添加一个读锁保证数据库的一致性

mysql> flush tables with read lock;

mysql> quit;

mysqldump -h127.0.0.1 -uroot -p -P3306 --all-databases --triggers --routines --events > /opt/all.sql

#最后恢复Master机器的读锁

mysql> unlock tables;

master2: 1)从mysql(master2)将备份数据导入数据库:

mysql -h 10.1.156.3 -uroot -p -P3306 < /opt/all.sql

2)master2数据库设置同步数值参数:

mysql> change master to master_host=‘10.1.156.3‘,master_user=‘slave‘,master_password=‘test2015‘,master_log_file=‘mysqlmaster-bin.000004‘,master_log_pos=396;

3)启动从数据库复制线程,并查询从数据库的复制线程状态

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.124.165.254

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqlmaster-bin.000004

Read_Master_Log_Pos: 1021

Relay_Log_File: mysql_S-relay-bin.000005

Relay_Log_Pos: 914

Relay_Master_Log_File: mysqlmaster-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

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: 1021

Relay_Log_Space: 1259

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: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: 709e2dcf-0b51-11e5-9754-286ed489d502

Master_Info_File: /home/mysql/data/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

1 row in set (0.00 sec)

查询结果中:Slave_IO_Running: Yes 同时出现才证明主从设置成功

Slave_SQL_Running: Yes

2.配置master2-->master1的主从实现双向主从设置:

master2: 1)创建同步的账号:(ip地址从mysql:master1所属IP)

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave‘@‘10.1.156.3‘ IDENTIFIED BY ‘test2015‘;

Query OK, 0 rows affected (0.13 sec)

mysql> flush privileges;

2)查看master2的master状态,获取二进制日志名和偏移量

mysql> show master status\G

*************************** 1. row ***************************

File: mysqlslave-bin.000001

Position: 120

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

master1: 1)master1数据库设置同步数值参数:

mysql> change master to master_host=‘10.1.156.5‘,master_user=‘slave‘,master_password=‘test2015‘,master_log_file=‘mysqlslave-bin.000001‘,master_log_pos=120;

2)启动从数据库复制线程,并查询从数据库的复制线程状态

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.1.156.3

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqlslave-bin.000001

Read_Master_Log_Pos: 199

Relay_Log_File: mysql-relay-bin.000002

Relay_Log_Pos: 367

Relay_Master_Log_File: mysqlslave-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

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: 199

Relay_Log_Space: 540

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: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 2

Master_UUID: 6f7cf3a2-8d08-11e5-a52d-5254008c0566

Master_Info_File: /home/mysql/data/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

1 row in set (0.00 sec)

3.注意:

1)

Slave_IO_Running: NO

Slave_SQL_Running: Yes

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

出现上面所述情况,可能有三种情况:1)网络有问题,连接不上;2)配置my.cnf可能有问题;3)授权的问题,replication slave和file权限是必须的。

解决Slave_IO_Running: NO

mysql>stop slave;

mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql>stop slave;

2)

Slave_IO_Running: connecting

Slave_SQL_Running: Yes

导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面:

1)、网络不通

2)、密码不对

3)、pos不对

可以参考这个连接:http://blog.csdn.net/i_bruce/article/details/17055135

我这里出现的原因是在my.cnf文件中没有使用这个参数:

[mysqld]

skip-name-resolve

所以导致数据库远程连接过慢,一直处于一个正在连接的状态。

参考这个连接:解决远程连接mysql很慢的方法(mysql_connect 打开连接慢) http://www.jb51.net/article/27616.htm

主备切换配置:(基于keepalived的vip漂移功能实现)

master1:

1)keepalived编译安装:

wget -P /usr/local/src http://www.keepalived.org/software/keepalived-1.2.19.tar.gz

tar xf /usr/local/src/keepalived-1.2.19.tar.gz -C /usr/local/src

cd /usr/local/src/keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64&& make && make install

2)将keepalived做成服务:

cd /usr/local/keepalived/ && cp etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp etc/sysconfig/keepalived /etc/sysconfig/ && mkdir /etc/keepalived && cp etc/keepalived/keepalived.conf /etc/keepalived/ && cp sbin/keepalived /usr/sbin

3)keepalived配置文件

vim /etc/keepalived/keepalived.conf

=====================================================

! Configuration File for keepalived

global_defs {

notification_email {  //定义邮件服务的

[email protected]  //定义收件人,这里改为本机,只是测试使用

}

notification_email_from [email protected]  //定义发件人,

smtp_server 127.0.0.1  //定义邮件服务器,一定不能使用外部地址

smtp_connect_timeout 30 //超时时间

router_id LVS_DOWNLOAD

}

vrrp_instance VI_1 {  //定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称

state MASTER  //开启后,该节点的优先级比另一节点的优先级高,所以转化为MASTER状态

interface eth0  //所有的通告等信息都从eth0这个接口出去

virtual_router_id 7  //虚拟路由的ID,而且这个ID也是虚拟MAC最后一段的来源,这个ID号一般不能大于255,且这个ID一定不能有冲突

priority 100  //初始优先级

advert_int 1  //通告的个数

authentication {  //认证机制

auth_type yzkj  //认证类型

auth_pass yzkj1234   //密码,应该为随机的字符串

}

virtual_ipaddress {  //虚拟地址,即VIP

10.1.156.2

}

}

master2:

1)keepalived编译安装:

wget -P /usr/local/src http://www.keepalived.org/software/keepalived-1.2.19.tar.gz

tar xf /usr/local/src/keepalived-1.2.19.tar.gz -C /usr/local/src

cd /usr/local/src/keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64 && make && make install

2)将keepalived做成服务:

cd /usr/local/keepalived/ && cp etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp etc/sysconfig/keepalived /etc/sysconfig/ && mkdir /etc/keepalived && cp etc/keepalived/keepalived.conf /etc/keepalived/ && cp sbin/keepalived /usr/sbin

3)keepalived配置文件

vim /etc/keepalived/keepalived.conf

=====================================================

! Configuration File for keepalived

global_defs {

notification_email {  //定义邮件服务的

[email protected]  //定义收件人,这里改为本机,只是测试使用

}

notification_email_from [email protected]  //定义发件人,

smtp_server 127.0.0.1  //定义邮件服务器,一定不能使用外部地址

smtp_connect_timeout 30 //超时时间

router_id LVS_DOWNLOAD

}

vrrp_instance VI_1 {  //定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称

state   //开启后,该节点的优先级比另一节点的优先级高,所以转化为MASTER状态

interface eth0  //所有的通告等信息都从eth0这个接口出去

virtual_router_id 7  //虚拟路由的ID,而且这个ID也是虚拟MAC最后一段的来源,这个ID号一般不能大于255,且这个ID一定不能有冲突

priority 99  //初始优先级

advert_int 1  //通告的个数

authentication {  //认证机制

auth_type yzkj  //认证类型

auth_pass yzkj1234   //密码,应该为随机的字符串

}

virtual_ipaddress {  //虚拟地址,即VIP

10.1.156.2

}

}

注意:使用keepalived设置主备会出现一定的问题,参考链接:http://my.oschina.net/moooofly/blog/223822

另外,互为主从的设置,主1一旦出现问题,主2是不是也会有相应的问题出现呢

mysql主从配置&&基于keepalived的主备切换

时间: 2024-12-25 04:21:33

mysql主从配置&&基于keepalived的主备切换的相关文章

mysql主从配置实现一主一从读写分离

主从介绍 定义 Mysql主从又叫Replication.AB复制.简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步 mysql主从是基于binlog,主上需开启binlog才能进行主从 主从过程大概有3个步骤 主将更改操作记录到binlog里 从将主的binlog事件(sql语句) 同步本机上并记录在relaylog里 从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O 线程传递binlog 从上有两个线

测试redis+keepalived实现简单的主备切换

转自: 测试redis+keepalived实现简单的主备切换 - Try My Best 尽力而为 - ITeye技术网站http://raising.iteye.com/blog/2311757 keepalived是一个是集群管理中保证集群高可用的一个服务软件,它具备心跳检测的功能.运用在redis上,则是具备主备切换的控制功能. keepalived的主备切换方案的设计思想如下: 当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby: 当 

mysql主从配置及其读写分离

mysql主从配置意思就是一个主mysql服务器,一个从mysql服务器,一共要用到两台服务器.主服务器新增一个账号专门让从服务器来访问同步工作,主从配置完成后,主服务器主要就是新增和update操作,从服务器主要是查询工作. 主服务器ip为:192.168.31.11 从服务器ip为:192.168.31.12 create user slave; //创建新用户 //slave用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql.说明一下19

Spark系列(五)Master主备切换机制

Spark Master主备切换主要有两种机制,之中是基于文件系统,一种是基于Zookeeper.基于文件系统的主备切换机制需要在Active Master挂掉后手动切换到Standby Master上,而基于Zookeeper的主备切换机制可以实现自动切换Master. 切换流程图 流程说明: Standby Master模式 1. 使用持久化引擎读取持久化的storeApps.storeDrivers.storeWorkers,持久化引擎有FileSystemPersistenceEngin

mysql 主从配置 和 主主配置

一:主从配置 A机:192.168.1.67 (主) B机:192.168.1.20 (从) A机操作: 1:备份要做主从的数据库. mysqldump -uroot -pkobe24 -S /tmp/mysql.sock discuz > /home/discuz.back #备份discuz至/home/discuz.back. scp /home/discuz.back [email protected]:/home/discuz.back #远程复制到从服务器上. 2:修改my.cnf

mysql主从介绍,准备工作,主配置,从配置,主从测试

主从介绍 MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步. MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程三个步骤 主将更改操作记录到binlog中 从将主的binlog事件(SQL语句)同步到本机并记录在relaylog中 从根据relaylog里面的SQL语句按顺序执行 该过程有三个线程,主上有一个logdump线程,用来和从的i/o线程传递binlog:从上

8.31 MySQL主从配置、准备工作、配置主、配置从、测试主从同步

1.MySQL主从配置  MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据是实时同步的 MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程大致有3个步骤 1)主将更改操作记录到binlog里 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里 3)从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O线

负载均衡高可用之LVS+Keepalived(DR/主备)+apache

负载均衡高可用之LVS+Keepalived(DR/主备)+apache 介绍: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. LVS集群采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的.高可用的虚拟服务器.整个服务器集群的结构对客户

解读mysql主从配置及其原理分析(Master-Slave)

在windows下配置的,后面会在Linux下配置进行测试,需要配置mysql数据库同步的朋友可以参考下. 1.在主数据库服务器为从服务器添加一个拥有权限访问主库的用户:GRANT REPLICATION SLAVE ON *.* TO ' test'@'%' IDENTIFIED BY 'test'; (%表示允许所有IP,可设置指定从服务器IP)添加用户后:可在从服务器上用mysql -h127.0.0.1 -utest -ptest; 来测试是否有权限访问主数据库 2.在主据库配置文件加上