IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Mysql数据库主从备份基本概念篇

    铁匠发表于 2017-01-05 09:00:24
    love 0

    本文主要是为了实现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



沪ICP备19023445号-2号
友情链接