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端真实执行时候的那些可执行的内容,并在自身执行。
主服务器安装 [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密码
[root@tiejiang1 ~]# vim /etc/my.cnf
    log-bin=mysql-bin   //必须启用二进制日志
    server-id = 7       //服务器唯一ID,默认是1,一般取IP最后一段
[root@tiejiang2 ~]# vim /etc/my.cnf
    log-bin=mysql-bin   //必须启用二进制日志
    server-id = 22      //服务器唯一ID,默认是1,一般取IP最后一段
[root@tiejiang1 ~]# service mysqld restart //主服务器 [root@tiejiang2 ~]# service mysqld restart //从服务器
[root@tiejiang1 ~]# mysql -uroot -pyuanfei123
    mysql> GRANT REPLICATION SLAVE ON *.* to '163ns'@'%' identified by '123456';    ////一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.163.22,加强安全。
[root@tiejiang2 ~]# mysql -uroot -pyuanfei321
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000002 |      249 |              |                  |
    +------------------+----------+--------------+------------------+
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
[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
                ...............................
主服务器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)
[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)
编写一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
				 			   上一篇
下一篇