[Linux]-MySQL主从复制

Posted Cheney

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 status\\G;    //查看同步的状态信息
*************************** 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的二进制日志文件,后面跟路径

以上是关于[Linux]-MySQL主从复制的主要内容,如果未能解决你的问题,请参考以下文章

linux笔记 第四十课 mysql主从复制

linux Mysql 主从复制 原理介绍和步骤详解

Linux搭建MySql主从复制

160525高并发之mysql主从复制(linux)

[Linux]-MySQL主从复制

Linux——MySQL主从复制读写分离