Mysql数据库主从备份基本概念篇-linux安全运维_跨零代码

跨零代码为大家提供高品质的运维解决方案,请大家多多来访,跨零不胜感激,在此谢过。

mysql数据库主从备份原理以及思路概念

1. 主服务器验证连接。 2. 主服务器为从服务器开启一个线程。 3. 从服务器将主服务器日志的偏移位告诉主服务器。 4. 主服务器检查该值是否小于当前二进制日志偏移位。 5. 如果小于,则通知从服务器来取数据。 6. 从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。 7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。 8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。

1、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置; 3、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”; 4、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

本文主要是为了实现mysql主从的备份效果,所以这里mysql就最基本的yum安装。

主服务器安装 [root@tiejiang1 ~]# yum -y install mysql mysql-server mysql-devel                //安装mysql数据库必要服务 [root@tiejiang1 ~]# /etc/init.d/mysqld start                //启动mysql [root@tiejiang1 ~]# chkconfig mysqld on                //设为开机启动 [root@tiejiang1 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf                //拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可) [root@tiejiang1 ~]# mysql_secure_installation                //为root帐户设置密码 回车,根据提示输入"y"。输入2次密码,回车。根据提示一路输入"y" 最后出现"Thanks for using MySQL!"  mysql密码设置完成,重新启动mysql [root@tiejiang1 ~]# /etc/init.d/mysqld restart                 //重启mysql服务

从服务器安装 [root@tiejiang2 ~]# yum -y install mysql mysql-server mysql-devel                //安装mysql数据库必要服务 [root@tiejiang2 ~]# /etc/init.d/mysqld start                //启动mysql [root@tiejiang2 ~]# chkconfig mysqld on                //设为开机启动 [root@tiejiang2 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf                //拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可) [root@tiejiang2 ~]# mysql_secure_installation                //为root帐户设置密码 回车,根据提示输入"y"。输入2次密码,回车。根据提示一路输入"y" 最后出现"Thanks for using MySQL!"  mysql密码设置完成,重新启动mysql [root@tiejiang2 ~]# /etc/init.d/mysqld restart                 //重启mysql服务

一、主从服务器分别以下操作

1. mysql数据库版本最好一致 2. 初始化表,并在后台启动mysql 3. 修改root密码

二、修改主服务器master

[root@tiejiang1 ~]# vim /etc/my.cnf     log-bin=mysql-bin   //必须启用二进制日志     server-id = 7       //服务器唯一ID,默认是1,一般取IP最后一段

三、修改从服务器slave

[root@tiejiang2 ~]# vim /etc/my.cnf     log-bin=mysql-bin   //必须启用二进制日志     server-id = 22      //服务器唯一ID,默认是1,一般取IP最后一段

四、重启两台服务器的mysql

[root@tiejiang1 ~]# service mysqld restart   //主服务器 [root@tiejiang2 ~]# service mysqld restart   //从服务器

五、在主服务器上建立帐户并授权slave

[root@tiejiang1 ~]# mysql -uroot -pyuanfei123     mysql> GRANT REPLICATION SLAVE ON *.* to '163ns'@'%' identified by '123456';    ////一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.163.22,加强安全。

六、登录主服务器的mysql,查询master的状态

[root@tiejiang2 ~]# mysql -uroot -pyuanfei321     mysql> show master status;     +------------------+----------+--------------+------------------+     | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |     +------------------+----------+--------------+------------------+     | mysql-bin.000002 |      249 |              |                  |     +------------------+----------+--------------+------------------+ 注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

七、配置从服务器Slave

[root@tiejiang2 ~]# mysql -uroot -pyuanfei321     mysql> change master to master_host='192.168.163.7',master_user='163ns',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=249;      //注意不要断开,249数字前后无单引号。     mysql> start slave;     //启动从服务器复制功能

八、检查从服务器复制功能状态

[root@tiejiang2 ~]# mysql -uroot -pyuanfei321 mysql> show slave status/G *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 192.168.163.7    //主服务器地址                   Master_User: 163ns    //授权帐户名,尽量避免使用root                   Master_Port: 3306     //数据库端口,部分版本没有此行                 Connect_Retry: 60               Master_Log_File: mysql-bin.000002           Read_Master_Log_Pos: 249      //同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos                Relay_Log_File: mysqld-relay-bin.000002                 Relay_Log_Pos: 251         Relay_Master_Log_File: mysql-bin.000002              Slave_IO_Running: Yes  //此状态必须YES             Slave_SQL_Running: Yes  //此状态必须YES                 ...............................

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。

九、主从服务器测试

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据

[root@tiejiang1 ~]# mysql -uroot -pyuanfei123     mysql> create database hi_db;       Query OK, 1 row affected (0.00 sec)        mysql> use hi_db;       Database changed        mysql>  create table hi_tb(id int(3),name char(10));       Query OK, 0 rows affected (0.00 sec)        mysql> insert into hi_tb values(001,'bobu');       Query OK, 1 row affected (0.00 sec)        mysql> show databases;        +--------------------+        | Database           |        +--------------------+        | information_schema |        | hi_db                |        | mysql                |        | test                 |        +--------------------+        4 rows in set (0.00 sec)

从服务器Mysql查询
[root@tiejiang2 ~]# mysql -uroot -pyuanfei321     mysql> show databases;        +--------------------+        | Database               |        +--------------------+        | information_schema |        | hi_db                 |       //I'M here,大家看到了吧        | mysql                 |        | test          |             +--------------------+        4 rows in set (0.00 sec)             mysql> use hi_db        Database changed     mysql> select * from hi_tb;           //查看主服务器上新增的具体数据        +------+------+        | id   | name |        +------+------+        |    1 | bobu |        +------+------+        1 row in set (0.00 sec)

10、完成:

编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。

#!/bin/bash port=`netstat -anl|grep 3306 |sed -n '1p' |awk '{print $4}'|awk -F: '{ print $2}'` array=($(mysql -uroot -p123 -e "show slave status/G"|grep "Running" |awk '{print $2}')) if ["$port" == "3306"] then    if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ]      then        echo "slave is OK"      else        echo "slave is error"    fi fi




//下面这个css和插件后台设置的主题有关系,如果需要换样式,则需要修改以下CSS名称

从零到一,创造未来!跨零代码综合IT问题解决服务站,欢迎你的到来。运维教程 只为你绽放。

本文固定链接: http://kua0.com/2019/02/10/mysql数据库主从备份基本概念篇-linux安全运维_跨零代码/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注