第25章 MySQL replication(主从)配置及加入nagios监控

环境介绍:

master:23.247.76.253

[[email protected]_client1 tool]#

mysql -V

mysql  Ver 14.14 Distrib 5.6.32, for linux-glibc2.5 (x86_64) using  EditLine wrapper

[[email protected]_client1 tool]#

cat /etc/redhat-release

CentOS release 6.7 (Final)

slave:23.247.78.254

[[email protected]_client2 ~]#

 mysql -V

mysql  Ver 14.14 Distrib 5.6.32, for linux-glibc2.5 (x86_64) using  EditLine wrapper

[[email protected]_client2 ~]#

 cat /etc/redhat-release

CentOS release 6.9 (Final)

1. 设置master

修改配置文件:

vim /usr/local/mysql_2/my.cnf

在[mysqld]部分查看是否有以下内容,如果没有则添加:

server-id=1

log-bin=mysql-bin

除了这两行是必须的外,还有两个参数,你可以选择性的使用:

binlog-do-db=test3,databasename2

binlog-ignore-db=databasename1,databasename2

binlog-do-db=需要复制的数据库名,多个数据库名,使用逗号分隔。binlog-ignore-db=不需要复制的数据库库名,多个数据库名,使用逗号分隔。这两个参数其实用一个就可以了。设置的test3为我要同步的数据库。

修改后重启:

/etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

mysql> grant replication slave on *.* to ‘repl‘@‘23.247.78.254‘ identified by ‘123456‘;

//这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123456,这里的23.247.78.254为slave的ip。

mysql> flush tables with read lock;  //锁定数据库,此时不允许更改任何数据

Query OK, 0 rows affected (0.00 sec)

mysql> show master status;  //查看状态,这些数据是要记录的,一会要在slave端用到

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000002 |      330 | test3        |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

设置slave:

先修改slave的配置文件my.cnf:

vim /etc/my.cnf

找到 “server-id = 1” 这一行,删除掉或者改为 “server-id = 2” 总之不能让这个id和master一样,否则会报错。另外在从上,你也可以选择性的增加如下两行,对应于主上增加的两行:

replicate-do-db=databasename1,databasename2

replicate-ignore-db=databasename1,databasename2

改完后,重启slave:

service mysqld restart


然后在slave上配置主从:

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host=‘23.247.76.253‘, master_port=3306,

-> master_user=‘repl‘, master_password=‘123456‘,

-> master_log_file=‘mysql-bin.000002‘, master_log_pos=330;

Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> start slave;

//其中master_log_file和master_log_pos是在上面使用 show master status 查到的数据。执行完这一步后,需要在master上执行一步:

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

然后查看slave的状态:

mysql> show slave status\G;

遇到错误:

Slave_IO_Running: No

Slave_SQL_Running: Yes

Last_IO_Errno: 1593

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

解决:

mysql> show variables like ‘server_id‘;    //查看服务器的id号set global server_id=XX                  修改id号

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

mysql> set global server_id=2;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘server_id‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

1 row in set (0.00 sec)

确认以下两项参数都为yes:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

测试主从同步:

master执行:

mysql> select count(*) from t1

-> ;

+----------+

| count(*) |

+----------+

|        0 |

+----------+

1 row in set (0.00 sec)

mysql> drop table t1;      //删除t1表

Query OK, 0 rows affected (0.01 sec)

mysql> select count(*) from t1;

ERROR 1146 (42S02): Table ‘test3.t1‘ doesn‘t exist

slave执行:

mysql> select count(*) from t1

-> ;

+----------+

| count(*) |

+----------+

|        0 |

+----------+

1 row in set (0.00 sec)

mysql> select count(*) from t1;

ERROR 1146 (42S02): Table ‘test3.t1‘ doesn‘t exist

在mster执行删除t1表,然后再slave查下t1表,提示t1表不存在。证明已经同步了master的操作;

主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行stop slave 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 start slave。

nagios 监控 mysql 主从同步状态

slave查询

[[email protected]_client2 ~]# mysql -uroot -p"123456" -e "show slave status\G"|grep "Running:"

Warning: Using a password on the command line interface can be insecure.

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

"Slave_IO_Running: Yes“和“Slave_SQL_Running: Yes”,这两个值全是"Yes"就表明主从库同步成功

命令:

[[email protected]_client2 ~]#

slave_status=($(mysql -uroot -p"123456" -e "show slave status\G"|grep Running |awk ‘{print $2}‘))

Warning: Using a password on the command line interface can be insecure.

[[email protected]_client2 ~]#

echo ${slave_status[0]}

Yes

[[email protected]_client2 ~]#

echo ${slave_status[1]}

Yes

查看检查脚本:

cat /usr/local/nagios/libexec/check_mysql_slave
#!/bin/sh 
slave_status=($(mysql -uroot -p"123456" -e "show slave status\G"|grep Running |awk ‘{print $2}‘))
if [ "${slave_status[0]}" = "Yes" -a "${slave_status[1]}" = "Yes" ] 
     then 
     echo "OK nagios_client2-slave is running" 
     exit 0 
else 
     echo "Critical nagios_client2-slave is error" 
     exit 2 
fi

在nrpe.cfg文件里加:

vi /usr/local/nagios/etc/nrpe.cfg

command[check_mysql_slave]=/usr/local/nagios/libexec/check_mysql_slave

重启nrpe:

pkill nrpe

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

服务器端的配置:

[[email protected]_server objects]#

/usr/local/nagios/libexec/check_nrpe -H 23.247.78.254 -c check_mysql_slave

OK nagios_client2-slave is running

编辑mysql服务监控配置文件

vi /usr/local/nagios/etc/services/mysql.cfg 

加上:

define service {

use                   generic-service

host_name             nagios_client2

service_description   check_mysql_replication_status

check_command         check_nrpe!check_mysql_slave

max_check_attempts    2

normal_check_interval 2

retry_check_interval  2

check_period          24x7

notification_interval 10

notification_period   24x7

notification_options  w,u,c,r

contact_groups        admins

process_perf_data     1

}

加到mysql服务组:vi servicegroups.cfg

members                 nagios_client1,port_3306,nagios_client2,port_3306,nagios_client2,check_mysql_replication_status

/etc/init.d/nagios 
checkconfig   #检测配置文件

[[email protected]_server services]#

/etc/init.d/nagios  reload        #重新加载配置文件

最后结果:


时间: 2024-10-24 06:34:24

第25章 MySQL replication(主从)配置及加入nagios监控的相关文章

MySQL Replication, 主从和双主配置

MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合.与之对应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少.   下图是MySQL官方给出了使用Replication的场景: Replication原理   Mysql 的 Replication 是一个异步的复制过程,从一个MySQL节点(称之为Master)复制到另

[转帖]mysql数据库主从配置

mysql数据库主从配置 https://www.toutiao.com/i6680489302947791371/ 多做实验 其实挺简单的 很多东西 要提高自信 去折腾. 架构与我 2019-04-16 21:50:24 在一篇文章<离线安装mysql数据库>,讲解了离线安装mysql数据库的过程,本文将讲解mysql数据库的主从配置方法.mysql数据库进行主从配置后,可以实现数据库的备份.同时应用也可以实现读写分离,提高应用的并发量. 1.主从原理 从<高性能mysql>书中

Linux系统中MySQL数据库“主从”配置

MySQL数据库"主从"配置 一.配置概述: 在Linux操作系统中配置MySQL数据库的主从复制是很重要的,为什么这样说呢!是因为在你搭建一个服务器以后你配置了2台数据库,一主一从.2台数据库配置好以后,当其中一台数据库被攻击以后,你被攻击的这台数据库的数据会被自动的备份到另一台数据库中去.即使被攻击了数据也不会丢失.配置主从就是为了让web网站或其他的软件可以正常运转,确保数据的存在. 二.配置步骤: <配置具备的条件> 1.需要在虚拟机上安装好两台主机,同时安装好同一

Mysql Replication 主从同步

简介: Mysql 的主从同步功能,这种解决方案是企业很常见的一种.常用于备份数据库,当客户端操作主库时,主库会产生binlog日志文件, 从库通过复制主库的binlog日志文件,然后解析成相应的 SQL 语句在从库执行,实现主从一致的效果. 这种解决方案只提供了日志的同步执行功能,而从库只能提供读操作,当主服务器发生故障时,必须手动处理故障转移,一般情况下的做法是将一台从服务器改为主服务器. Master : 192.168.1.88Slave : 192.168.1.80 一.配置 Mast

mysql数据库主从配置及还原

主数据库服务器的配置master 51 做主从配置要保持两个数据库中的库和表一致 1 做用户授权2 启用binlog日志3 查看正在使用的binlog日志文件1. mysql> grant replication slave on . 授权.(所有的库和表)-> to-> [email protected]"%" 可用%代表所有,也可指定具体ip地址-> identified by "123456"; 指定密码2.]#vim /etc/my.

同一台电脑windows环境下的mysql的主从配置

1.下载5.6.zip包 从mysql的官网下载5.6对应的zip包,因为5.7版本解压后没有.ini文件,所以改成安装5.6版本了. 2.配置 解压zip包,并复制一份待配置从库 在我的mysql中需要D:\software\mysql\mysql1和D:\software\mysql\mysql2两个 3.安装mysql主服务器 更改D:\software\mysql\mysql1路径下的my-default.ini文件my.ini 在文件中添加如下配置: 注意这个路径的方向一定要是右斜杠,

mysql数据库主从配置

MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维 护日志文件的一个索引以跟踪日志循环.当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那 时起发生的任何更新,然后封锁并等待主服务器通知下一次更新. 为什么使用主从复制? 1.主服务器/从服务器设置增加了健壮性.主服务器出现问题时,你可以切换到从服务器作为备份. 2.通过在主服务器和从服务器之间切分处理

Mysql Master-slave 主从配置

MySQL主从复制 场景描述:主数据库服务器:192.168.10.130,MySQL已经安装,并且无应用数据.从数据库服务器:192.168.10.131,MySQL已经安装,并且无应用数据. 2.1 主服务器上进行的操作 启动mysql服务 /opt/mysql/init.d/mysql start 通过命令行登录管理MySQL服务器 /opt/mysql/bin/mysql -uroot -p'new-password' 授权给从数据库服务器192.168.10.131 mysql> GR

mysql数据库主从配置的几种方式

摘录地址:http://www.cnblogs.com/stacks/p/7171648.html 1.主从复制集群: 主服务器负责数据写入,从服务器负责读操作. 主服务器所有的操作都写入二进制日志,从服务器开启中继日志和两个线程: (1)sql_thread:负责从中继日志读取内容,然后replay到数据库中: (2)io_thread:负责连接主服务器,把主服务器的二进制日志复制到自己的中继日志: 2.双主复制集群配置 主服务器和从服务器同时开启二进制日志和中继日志,数据可以写入任何一个服务