zoukankan      html  css  js  c++  java
  • [Linux]-MySQL主从复制

    MySQL支持的复制类型:

      1) 基于语句的复制。在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高;

      2) 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍;

      3) 混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制;

    MySQL主从复制的原理:

    1) 在Master中每个事物更新数据完成之后,写入二进制日志中;

    2) slave的I/O线程监控Master的二进制日志,一旦日志发生变化,就将变化的部分读取并写入到slave的中继日志中去;

    3) slave中的SQL线程监控中继日志,一旦发生变化读取变化的内容,之后重放(重新执行一遍SQL语句),实现mysql数据的同步。

    主MySQL服务器(master)------从MySQL服务器(slave)

    配置

    mount  /dev/cdrom  /mnt/    //挂载光盘使用yum

    1、安装yum,把需要的安装包放在服务器里面,yum会自动安装依赖关系

    [root@bogon ~]# rm -rf /etc/yum.repos.d/*
    [root@bogon ~]# vim /etc/yum.repos.d/yum.repo
    [yum]
    name=yum install
    baseurl=file:///mnt/
    enabled=1
    gpgcheck=0

    2、安装mysql服务器

    #!/bin/bash
    #安装Mysql服务
    #初始化当前所处的路径
    pwd_dir=`pwd`
    #######################[初始化变量]#######################
    #mysql源码包的名称
    mysql_package_name='mysql-5.5.22.tar.gz'
    #cmake源码包的名称
    cmake_package_name='cmake-2.8.6.tar.gz'
    #mysql安装路径
    mysql_install='/usr/local/mysql'
    #mysql解压出源码包目录的名称
    mysql_package_dir='mysql-5.5.22'
    #cmake解压出源码包目录的名称
    cmake_pachage_dir='cmake-2.8.6'
    #源码包解压存放路径
    code_package_dir='/usr/src/'
    #依赖包的文件名称
    subjoin_package_file='ncurses-devel-5.7-3.20090208.el6.x86_64.rpm'
    ###########################[END]############################
    #卸载rpm方式的安装的mysql服务
    rpm -e mysql-server --nodeps &> /dev/null
    #检查依赖包
    rpm -q ncurses-devel &> /dev/null
    if [ $? -ne 0 ]
    then
        rpm -ih $subjoin_package_fiel --nodeps
    fi
    
    #编译安装cmake
    tar zxvf $cmake_package_name -C $code_package_dir &> /dev/null
    cd $code_package_dir$cmake_pachage_dir
    ./configure &> /dev/null
    gmake &> /dev/null
    gmake install &> /dev/null
    cd $pwd_dir
    #编译安装msyql
    tar zxf $mysql_package_name -C $code_package_dir &> /dev/null
    cd $code_package_dir$mysql_package_dir
    cmake -DCMAKE_INSTALL_PREFIX=$mysql_install -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWHIT_CHARSETS=all &> /dev/null
    make &> /dev/null
    make install &> /dev/null
    #配置msyql
    userdel mysql &> /dev/null
    useradd -M -s /sbin/nologin mysql &> /dev/null
    chown -R mysql:mysql  $mysql_install &> /dev/null
    cp -f ${mysql_install}/support-files/my-medium.cnf /etc/my.cnf
    ln -s ${mysql_install}/bin/* /usr/local/bin/
    cp ${mysql_install}/support-files/mysql.server /etc/rc.d/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    #初始化mysql
    $mysql_install/scripts/mysql_install_db --user=mysql --basedir=$mysql_install --datadir=${mysql_install}/data/ &> /dev/null
    
    service mysqld start &> /dev/null
    echo 'mysql install successful'
    MySQL脚本

    3、配置主要的MySQL服务器(master)

    修改mysql的配置文件

    [root@bogon ~]# vim /etc/my.cnf 
    ...... //省略部分配置内容
    # Replication Master Server (default)
    # binary logging is required for replication
    log-bin=master-bin         //修改
    server-id       = 1           //主服务器,数字越小等级越高
    log-slave-updates=true   //修改
    [root@bogon ~]# service mysqld restart //重启服务

    主服务器登录MySQL给从服务器同步的权限

    [root@bogon ~]# mysql -u root -p
    mysql> grant replication slave on *.* to 'myslave'@'192.168.1.%' identified by '123.com'; mysql> flush privileges; //强制刷新
    mysql> show master status;
    +-------------------+----------+--------------+------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | master-bin.000001 |      338 |              |                  |
    +-------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

     其中File列显示日志名,Position列显示偏移量,这两个值在后面配置从服务器的时候需要。

    Slave应从该点在Master上进行新的更新

    配置mysql从服务器(slave)

    server-id       = 2       //修改,要低于主mysql,更不能一样
    relay-log=relay-log-bin   //添加
    relay-log-index=slave-relay-bin.index   //添加
    [root@bogon ~]# service mysqld restart //重启服务

    登录MySQL,配置同步

    按主服务器的file信息和Position位置号更改下面命令中的master_log_file和master_log_pos参数;

    [root@bogon ~]# mysql -u root -p
    mysql> change master to master_host='192.168.1.9',
    master_user='myslave',master_password='123.com',
    master_log_file='master-bin.000001',
    master_log_pos=338;
    mysql> start slave; //开始实时同步
    mysql> show slave statusG;    //查看同步的状态信息
    *************************** 1. row ***************************
                   Slave_IO_State: Connecting to master
                      Master_Host: 192.168.1.9
                      Master_User: myslave
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-bin.000001
              Read_Master_Log_Pos: 338
                   Relay_Log_File: relay-log-bin.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: master-bin.000001
                 Slave_IO_Running: Connecting
                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: 338
                  Relay_Log_Space: 107
                  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: NULL
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 2003
                    Last_IO_Error: error connecting to master 'myslave@192.168.1.9:3306' - retry-time: 60  retries: 86400
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 0

    验证

    在主服务器上创建一个库,然后在从服务器上刷,就可以看到我们所创建的库

    master-bin.000001 是一个二进制的文件,里面存放的是我们创建库写入的sql语句

    我们可以用mysqlbinlog命令可以查看mysql的二进制日志文件,后面跟路径

  • 相关阅读:
    监听事件 队列 邮件发送
    elasticsearch 天气
    elasticsearch
    event 监听事件
    observer 监听的实现 laravel 框架
    中间件
    git 代码 上传到码云
    laravel 省略入口文件 index.php
    limit offset 和limit
    CSS变形和动画
  • 原文地址:https://www.cnblogs.com/chenwz/p/7657884.html
Copyright © 2011-2022 走看看