mysql主从配置

MySQL主从介绍:

MySQL主从叫作Replication、AB复制。就是A和B两台机器作主从后,在A上写数据,B也会跟着写数据,二者数据实时同步的。mysql

MySQL主从是基于binlog的,主上须开启binlog才能进行主从。主从主要做用:数据备份,负载均衡(读写分离)web

主从配置步骤:sql

1.主将更改操做记录到binlog里。数据库

2.从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里。vim

3.从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另一个SQL线程用来把relaylog里面的sql语句落地。bash

 

主从配置准备工做:

准备两台机器,配置好基础环境,都安装好mysql并开启mysql服务。服务器

 

配置主:

1.修改mysql主配置:负载均衡

vim /etc/my.cnf          #添加如下配置:ide

server-id=101            #定义server id ,可随意定义
log_bin=zjy01            #定义binlog的log前缀,可随意定义

重启mysql服务:性能

/etc/init.d/mysqld restart

查看/data/mysql/下是否有对应log_bin定义的前缀文件生成:zjy.000001和zjy.index

 

2.建立测试所用数据库和数据文件:

从原有的test数据库导出数据:

mysqldump -uroot -p123456 test > /tmp/test.sql

建立新库test2用于测试:

mysql -uroot -p123456 -e “create database test2”

将导出的测试数据test.sql恢复到test2库中:

mysql -uroot -p123456 test2 < /tmp/test.sql

 

3.建立并设置同步数据用户相关:

建立一个mysql的用户用于数据同步时使用:

mysql -uroot -p123456

mysql> grant replication slave on *.* to 'repl'@'192.168.1.101' identified by '123456';      #repl用户,1.101为从库的IP

锁定数据表

mysql> flush tables with read lock;                                       #暂时中断写入操做,保持此状态进行同步

查看并记住file和position

mysql> show master status;                                                  #主从配置时用到

 

4.备份主库全部数据库:

mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql

......

 

    

1.修改mysql主配置:

vim /etc/my.cnf          #添加如下配置:

server-id=102              #与主不同

log_bin不须要配置

重启mysql服务:

/etc/init.d/mysqld restart

 

2.拷贝主上备份的全部数据库的备份sql文件并恢复:

拷贝备份文件

scp 192.168.1.101:/tmp/*.sql /tmp/

建立对应于主上的全部库

mysql -uroot -p123456 -e “create database test2”

mysql -uroot -p123456 -e “create database test1”

mysql -uroot -p123456 -e “create database zrlog”

......

恢复数据到数据库:

mysql -uroot -p123456 test2< /tmp/test2.sql

mysql -uroot -p123456 zrlog< /tmp/zrlog.sql

......

 

3.配置从:

mysql -uroot -p123456

mysql> stop slave;

mysql> change master to master_host='192.168.1.101', master_user='repl', master_password='123456', master_log_file='zjy.000001', master_log_pos=542;                            #1.101为主IP,zjy.000001和542为住配置中第三步show master status;查看出来的file和position字段的内容

mysql> start slave;

查看是否配置主从成功:

mysql> show slave status\G          

*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.101
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: zjy.000002
          Read_Master_Log_Pos: 120
              Relay_Log_File: localhost-relay-bin.000005
                Relay_Log_Pos: 282
        Relay_Master_Log_File: zjy.000002
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
          Replicate_Do_Table:

 

主上解锁表:

mysql -uroot -p123456

mysql> unlock tables;

 

参数介绍:Mysql的my.cnf配置文件中

主服务器:
binlog-do-db=                        #仅同步指定的库
binlog-ignore-db=                    #忽略指定的库

从服务器:
replicate_do_db=                     #同步指定的库
replicate_ignore_db=                 #忽略指定的库
replicate_do_table=                  #同步指定的表
replicate_ignore_table=              #忽略指定的表
#建议只使用下面2个语句,使用参数“replicate_wild_”,使匹配更精确,提高使用性能。
replicate_wild_do_table=  如zjy.%,支持通配符    
replicate_wild_ignore_table=

 

测试主从同步:

主操做:

mysql -utest2 

mysql> show tables;

mysql> select count(*) plugin;               #查看plugin表有多少行

mysql> truncate table plugin;               #清空表里数据

mysql> drop table website;                   #删除表website

 

从操做:

mysql -utest2                         

mysql> select count(*) plugin;               #查看plugin表是否已经清空数据

mysql> show tables;                              #查看website表是否已经不存在

 

 

千万别在从上面删除任何数据,一旦删除就意味着数据不是一致,主从就失败了!

须要从新备份恢复从新配置主从

相关文章
相关标签/搜索