MySQL主从复制(Master-Slave)实践

下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络):

用途及条件 

 mysql主从复制用途
  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务
 主从部署必要条件:
  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库

原理

 mysql主从复制原理

 从库生成两个线程,一个I/O线程,一个SQL线程;

  i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
 SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
 
实现MySQL主从复制需要进行的配置:
 实现步骤:
  1.首先修改mysql的配置文件,使其支持二进制日志功能。
    打开主服务器的mysql配置文件:my.conf
    代码:# vi /etc/my.cnf
    加入如下三行代码:

  参数解释:

     log-bin=mysql-bin  //将mysql二进制日志取名为mysql-bin

       binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed

       server-id=101 //为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id 

  配置完成,:wq 保存,重启mysql

  重启mysql命令:# service mysqld restart

  同样的,进入从服务器,配置从服务器的my.cnf,重复步骤1即可,

  唯一的区别是,server-id要改成从服务器的ip尾位,即server-id=105;其他两项是一样的,保存,并重启mySQL;

注:mysql的配置文件路径查询方式:

  1、Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。

  2、Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。

  3、Linux用rpm包安装的MySQL是不会安装/etc/my.cnf文件的

查询配置文件路径方式:

  

 2.在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。

  进入主服务器的mysql界面,

   命令: # mysql -u root -p 111111     //我这里mysql账号是root,密码是111111

   在mysql操作界面下,输入下面一行命令:

   GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '111111'; 

 3.查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变).

 

 4.设置从服务器

   进入从服务器mysql

  命令: # mysql -u root -p111111

关闭slave(如果你以前配置过主从的话,一定要先关闭)

命令:stop slave;

 

开始配置:

  输入下面代码即可:

 

参数解释:MASTER_HOST  :  设置要连接的主服务器的ip地址

       MASTER_USER  :  设置要连接的主服务器的用户名

       MASTER_PASSWORD  :  设置要连接的主服务器的密码

       MASTER_LOG_FILE  :  设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息

       MASTER_LOG_POS  :  设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)

先在从服务器配置完成,启动从服务器:

  命令: start slave;

5.查看是否配置成功:

  命令: show slave status;

 

上面两项均为yes,说明配置成功

 

 master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项: 

# 不同步哪些数据库  
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
  
# 只同步哪些数据库,除此之外,其他不同步  
binlog-do-db = game

 

posted @ 2019-05-14 15:57  myseries  阅读(2344)  评论(0编辑  收藏  举报