mysql主从复制及双主复制

Posted 鱼夫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql主从复制及双主复制相关的知识,希望对你有一定的参考价值。

之前做过一次在单台机器上的多实例的mysql,这次分开做,使用两台主机。

这里使用的主机地址分别为:

MASTER:192.168.214.135

SLAVE  : 192.168.214.128

这两个主机已经安装过mysql,但是两个数据库数据不一样

主从复制大致步奏

配置MySQL复制基本步骤:

一、master

1、启用二进制日志
log-bin = master-bin
log-bin-index = master-bin.index

2、选择一个惟一server-id
server-id = {0-2^32}

3、创建具有复制权限的用户
REPLICATION SLAVE

二、slave

1、启用中继日志
relay-log = relay-log
relay-log-index =

2、选择一个惟一的server-id
server-id = {0-2^32}

3、连接至主服务器,并开始复制数据;
mysql> CHANGER MASTER TO MASTER_HOST=‘‘,MASTER_PORT=‘‘,MASTER_LOG_FILE=‘‘,MASTER_LOG_FIEL_POS=‘‘,MASTER_USER=‘‘,MASTER_PASSWORD=‘‘;
mysql> START SLAVE;

mysql> START SLAVE IO_Thread;
mysql> START SLAVE SQL_Thread;

 

 

下面检查主服务器MASTER的数据库配置文件

[mysqld]
port		= 3306
socket		= /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
datadir=/mydata/data
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed
#relay-log = relay-mysql
#relay-log-index = relay-mysql.index
#auto-increment-increment = 2
#auto-increment-offset = 1
server-id	= 1

  下面配置SLAVE的配置文件

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysqldata
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id = 2
relay-log = relay-log
relay-log-index = relay-log.index
主从数据库的其他配置项有所不同,这里先不管

 一: 上面主从库的配置文件都设置好后,登录到MASTER库上,创建一个具有复制权限的用户

grant replication slave on *.* to ‘feng‘@‘192.168.%.%‘ identified by ‘fsz123‘;

    flush privileges;

    slave添加master信息前先查看master库的bin-log日志记录位置节点,master库中执行:

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000029 | 107 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

 二:登录从库SLAVE 添加master信息

mysql> change master to  master_host=‘192.168.214.135‘,master_user=‘feng‘,master_password=‘fsz123‘,master_log_file=‘master-bin.000029‘,master_log_pos=323;
Query OK, 0 rows affected (0.15 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 三:启动从库复制:

mysql> SLAVE START;

  执行: show  slave  status\G 查看复制状态

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.214.135
                  Master_User: feng
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000029
          Read_Master_Log_Pos: 323
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 254
        Relay_Master_Log_File: master-bin.000029
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
从库的IO线程和SQL线程已经开启
下面执行show databases; 查看数据库同步状况


  查看从库的数据信息

 Database           |
+--------------------+
| information_schema |
| demo               |
| demo222            |
| demo333            |
| mysql              |
| performance_schema |
| test     
主库里新建的demo222,demo333已经到从库中

  //////////////////////////////////////////////////////////////////////////////////////////////////////

mysql的双主模式配置

  

在上面的基础上,再增加双主复制的实现,实现双主模式,在从库中也要开启二进制日志文件,同时主库中也增加slave中继日志功能

编辑从库my.cnf

log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed

relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 2

 编辑主库my.cnf 添加slave日志

log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed

auto-increment-increment = 2   #步进值auto_imcrement。一般有n台主MySQL就填n
auto-increment-offset = 1  #步进值auto_imcrement。一般有n台主MySQL就填n

  #binlog-ignore=mysql   #忽略mysql库【或者其他不需同步复制的库】

   # replicate-do-db=aa   #要同步的数据库,默认所有库【或者其他指定复制的库】

relay-log = relay-mysql
relay-log-index = relay-mysql.index

  在主库中执行change master to 指令

change master to  master_host=‘192.168.214.128‘,master_user=‘feng‘,master_password=‘fsz123‘,master_log_file=‘master-bin.000001‘,master_log_pos=107;
mysql> flush privileges;

  启动主库中的复制功能

start   slave;

 

此时,mysql双主复制完成。

 
































以上是关于mysql主从复制及双主复制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:主从复制结构双主复制结构利用SSL实现安全的MySQL主从复制

Mysql主从复制,双主热备

keepalived主从及双主配置

MySQL的主从复制+双主模式

mysql主主复制(双主复制)配置步骤

Mariadb半同步复制,主从复制与双主复制