首页 > 代码库 > Mysql主从同步(Mysql A B复制)配置

Mysql主从同步(Mysql A B复制)配置

Mysql主从同步(Mysql A B复制)配置

Mysql主从同步(Mysql AB复制)功能是自动备份数据

vim/var/lib/mysql/auto.cnf  数值不能一样

master主               slave从

192.168.1.1        192.168.1.2

1、主从环境配置:

   mysql_5.6版本

servicemysql start

        ping

        service iptablesstop

        setenforce 0  

从数据库服务器上一定要有主数据库服务器上的库和表 且 表结构要相同

     2master数据库服务器配置

1)master服务器授权用户可以从slave服务器上连接自己,且有拷贝数据的权限

mysql>grantreplication slave on *.* to

slaveuser@"从数据库服务器的地址"  identified by  "密码";                                           

        (注:在从数据库服务器上测试授权用户slaveusser能否登陆主数据库服务器。)

        2)编辑配置文件:开启binlog日志,指定id(1-255,同一个网段内不允许重复)

        [root@data ~]# vim /etc/my.cnf                                         

        [mysqld]                                                              

        log-bin          //主数据库服务器必须开启binlog日志                                                      

        server_id=1  //通常用自己IP地址中的主机位                             

        3)重启服务

        servicemysql restart                                                 

    

show slave hosts;   //查看主数据库服务器上有哪些从服务器

reset master;  // 删除所有binlog日志,且自动生成第一个binlog日志 

 

 

 

注:在主数据库服务器上配置哪些库可以被slave从服务器同步,哪些库不可以被slave从服务器同步。

 

在Master主服务器上设置哪些库参加主从同步

注:一般都在服务器上设置,主、从服务器在其中一台上设置就可以

Vim/etc/my.cnf

[mysqld]

binlog-do-db=test    //slave从服务器可以同步test库

binlog-ignore-db=mysql   //slave从服务器不可以同步mysql库

可以同步不可以同步属于互斥选项,不要同时设置

spacer.gif

 

 

3slave数据服务器配置

1.开启从数据服务器功能

Vim  /etc/my.cnf                                                                

[mysqld]                                                                       

server_id=2     //指定服务器ID号,一般用本机的IP地址主机位                  

2.servicemysql restart           //重启服务                                 

3.登录Master主服务器,查看主数据库服务器状态里当前使用的binlog和偏移量

 mysql> show masterstatus;    //显示主数据库服务器的状态                    

spacer.gif

File  //正在使用的binlog日志

Position   //正在使用binlog日志的偏移量,如图含义是从偏移量位置120开始记录

Binlog_DO_DB  //显示准许同步复制的库

Binlog_Ignore_DB   //显示不准许同步复制的库

Executed_Gtid_Set   //跟binlog日志相似,在这里都是用来主从同步的,默认关闭,两个用一个就可以.

开启Gtid:   //没特殊要求不开启

vim  /etc/my.cnf

gtid_mode=on

4.登录slave从数据库服务器(以本地管理员登录)

Mysql  -uroot –p123456

mysql>changemaster to master_host="主服务器IP地址",                     

     >master_user="slaveuser主服务器上的授权用户",                        

     >master_password="授权用户的密码",                                   

     >master_log_file="data-bin.000001",//写图-1file字段里的binlog日志

     >master_log_pos=120; //写图-1的positionz字段里的偏移量数

从配完之后,/var/lib/mysql下会多这几个文件

 

mysql>change master to master_host="192.168.3.18",

    -> master_user="slaveuser",

    -> master_password="111",

    ->master_log_file="gss.000001",

    -> master_log_pos=120;

QueryOK, 0 rows affected, 2 warnings (0.10 sec)

master.info

relay-log.info 

tarena-relay-bin.000001

tarena-relay-bin.index

5.最后开起slave数据库里的server_IO与server_SQL进程

mysql> show slave status\G;     //查看服务当前状态                          

Slave_IO_Running:NO                                                           

Slave_SQL_Running:NO                                                          

mysql>startslave;         //开启IO和SQL                                    

Slave_IO_Running:  YES     //必须开启状态                                   

Slave_SQL_Running:YES      //必须开启状态                                    

注:主数据服务器与从数据服务器的UUID不能相同,相同IO启动不了,

vim/var/lib/mysql/auto.cnf查看UUID,相同就随便改一下,只要不一样就行,

改完重启服务

 

在从服务器上更改 change master to 下面语句内容时,首先要做 stop slave 即停止主从服务

注:在主数据库服务器上配置哪些库可以被slave从服务器同步,哪些库不可以被slave

从服务器同步。

 

在Slave从服务器上设置哪些库参加主从同步

Vim  /etc/my.cnf

[mysqld]

replicate_do_db=mysql    //同步mysql库,可以设置多条

replicate-ignore-db=mysql   //不可以同步mysql,不可以和replicate_do_db=一起使用

report-host= localhost //向主服务器报告自己主机名,主服务器查询时会知道是哪个从服务器

report-host=192.168.1.2 //向主服务器报告自己IP,主服务器查询时会知道是哪个从服务器

报告主机名或IP地址,两条写一条就可以

Slave-net-timeout=60   //主从网络中断时,等待60秒,自动连接

read_only=1   //只读模式,同步与super权限用户例外

log-slave-updates 记录从库更新,允许链式复制(A-B-C)(这个选项在做主-从-从(A-B-C)时,如果A上的数据有变化时,C也同步更新,需要在A、B、C三台数据服务器的配置文件/etc/my.cnf的[mysqld]下全部写上)

spacer.gif

 

 

注:开启功能后,数据库目录/var/lib/mysql/会多出很多文件

[root@khj~]ls /var/lib/mysql/

master.info    // 连接主数据库服务器的配置信息

relay-log.info  // 中继日志信息

localhost-relay-bin.000001  // 中继日志文件,是主复制过来的日志文件叫中继

localhost-relay-bin.index  //  中继日志文件列表

 

6.查看从数据库服务器的状态

mysql>show  slave status\G;  //查看从数据服务器的状态

Slave_IO_Running:  YES     //IO线程必须为YES  重要

Slave_SQL_Running: YES    //SQL线程必须为YES  重要

 

Slave_IO_Running:  YES

作用:负责连接主数据库服务器;把master上binlog日志里的SQL语句拷贝到本机的relaybinlog日志里。

  • 连接不上主数据库服务器时会出错:

物理线路

安全限制

授权信息不对

指定使用的binlog日志文件与主数据库服务器上正在使用的不一致

Slave_SQL_Running: YES

作用:执行本机relaybinlog日志里的SQL语句。

如果 Slave_sql_running 启动不了,原因可能是:从数据库服务器上的库和表 表结构与主数据库服务器上不一致时会出错。                        

 

 

二、Mysql主从同步工作原理

      1mysql>show master status;       //查看主数据库服务器的状态              

默认不允许对单个库做replicationslave授权

binlog-do-db=库名 设置master对指定库记日志,从而对指定的库做数据同步

binlog-ignore-db=库名 不同步指定的库 

在my.cnf文件中添加以上选项

     2mysql> show slave status;   //查看从数据库服务器的状态                 

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

IO:连接master服务器,并把master服务器binlog文件里的sql语句拷贝到本机的relaybinlog文件里

    连接不上主数据库服务器时会处于No状态

SQL:执行本机relaybinlog文件里的sql语句

     从数据库服务器上没有主数据库服务器上的表和库,或表结构与master不一致的时候会处于No状态

只有IO和SQL状态同时为Yes,从数据库服务器才能正常与主数据库服务器同步

Master_Log_File:主数据库服务器当前的binlog日志

Relay_Log_File  当前从数据库服务器使用的中继日志

Relay_Master_Log_File:中继文件中的数据是从主数据库服务器的哪个文件中读来的

发现参数不一样时修改数据库服务器的状态

mysql>stop  slave;   //修改时要先停止从服务器状态                                                   

mysql>changemaster to 选项=值,选项=值;                              

mysql>start  slave;    //开机从服务器状态                                                 

选项:master_host=’master主机IP’

master_user=’授权用户’

master_password=’密码’

master_log_file=’binlog日志名’

read_master_log_pos=节点数

3、从数据库服务器上文件的作用

master.info    //主数据库服务器的信息,文件存在时,slave连接master时使用该文件,主配置文件中的信息将被忽略

mysqld-relay-bin.index    //记录从数据库服务器上已有的binlog文件列表

relay-log.info     //binlog文件信息

mysqld-relay-bin.000001      //从数据库服务器的binlog中继日志

     4、主数据库服务器执行的改变数据的SQL语句将写到master的binlog日志中,从数据库服务器的IO进程读取master的binlog日志,并将其写到自己的binlog中继日志中,然后SQL进程执行binlog中继日志中的SQL语句,实现主从同步。

三、mysql主从同步结构

生产环境一主多从和主从从用的比较多

1、一主一从,建议将从服务器设置为只读

  192.168.10.1(master)  192.168.10.2(slave)

2、一主多从

  192.168.10.1(master)  192.168.10.2/192.168.10.3/192.168.10.4(slave)

 

3、主从从   log-slave-updates主从服务器上的配置文件里必须加

 

 

  192.168.10.1(10.2master)主  

192.168.10.2(10.1slave)(10.3的master)从主 

192.168.10.3(10.2的slave)从

10.1是10.2的主,10.2是10.3的主 10.2分别是10.1的从和10.3的主

思路:

1、给10.1配置主   10.2配置从 实现10.2拷贝10.3binlog日志同步

2、在从的基础上给10.2在配置成主必须开binlog日志    10.3配置从 实现拷贝10.2的binlog日志同步

3、10.2属于从双数据库服务器,所以在10.2的主配置文件里加一个选项是

   Vim /etc/my.cnf

   [mysqld]

   log-slave-updates  //设置主从从的时候从双服务器上必须加这条选项

 

4.启动从数据服务器10.210.3状态

 mysql>slavestart;    //启动从数据库服务器状态

    mysql>show slave status;   //查看从服务器状态

               slave_IO_Running:  YES    //IO线程必须为YES 重要

slave_SQL_Running: YES     //SQL必须YES

注:主数据库服务器必须启动binlog日志所以10.1和10.2必须启动binlog日志,作用是:从服务器会拷贝主服务器的binlog日志,然后在本机生成中继日志,然后在执行中继日志里的SQL语句达到主从同步

4、主主结构(互为主从)

  192.168.10.1(master主)   192.168.10.2(slave从)

               (slave从)                 (master主)

.删除主从结构

1 把从数据库服务器上的slave 进程停止

数据库管理员身份登录数据库

Mysql>  stop slave

2删除从服务器上的四个文件

[]#rm  -rf

master.info

relay-log.info 

tarena-relay-bin.000001

tarena-relay-bin.index

主从从

192.168.3.18

 

 

 

 

 

192.168.3.200

[mysqld]

log-bin=shuai

server_id=200

datadir=/var/lib/mysql

log-slave-updates=1

 

 

192.168.3.100从从

[root@localhost 桌面]# mysqldump -h192.168.3.200 -uroot -p111--all-databases > /sql.sql

Warning: Using a password on the command line interface can beinsecure.

 [root@localhost 桌面]# mysql-hlocalhost  -uroot -ptarena </sql.sql

Warning: Using a password on the command line interface can beinsecure.

 

 

四、Mysql读写分离(Mysql代理服务器)

Mysql代理服务器

spacer.gif

思路:

1 mysql-proxy服务监听3306端口

2 在后端的数据库服务器1.11.2上做用户授权

3 为保证用户能够看到写入的数据,把负责读写操作的数据库服务器做成主从同步的结构


Mysql主从同步(Mysql A B复制)配置