美文网首页
Mysql 主从

Mysql 主从

作者: tanghuibook | 来源:发表于2018-10-27 19:21 被阅读0次
    介绍

    MySQL数据库设置读写分离,可以使对数据库的写操作和读操作在不同服务器上执行,提高并发量和相应速度。

    搭建环境

    我使用了VMware,分别在两台虚拟机上装的Mysql数据库。
    MySQL安装参考: http://www.jianshu.com/p/78f05e1420c6
    开放服务器端口参考: https://www.jianshu.com/p/35c1accddfb5
    Github 项目示例地址:https://github.com/tanghuirepository/spring-mybatis.git

    主库master
        192.168.116.129         mysql版本  5.7
    
    从库slave
          192.168.116.135       mysql版本  5.7
    

    配置
    创建用户
    在主库创建一个用户,用于从库读取主库的执行日志。

         需要在mysql命令行里执行,需要先登录命令行
        GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.116.129' IDENTIFIED BY 'test';
    

    修改my.cnf
    linux系统在 /etc/my.cnf ,mac系统在安装的MySQL的目录,windows也一样。
    在my.cnf文件里增加一下代码

        server-id = 1  //数据库ID号
        log-bin=master-bin  //启用二进制日志
        log-bin-index=master-bin.index  //二进制日志名称
    
    查看状态

    登陆mysql命令行后,输入show master status,如果出现下面信息代表主库配置完成

      mysql> show master status;
      +-------------------+----------+--------------+------------------+
      | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +-------------------+----------+--------------+------------------+
      | master-bin.000001 |   672675 |              |                  |
      +-------------------+----------+--------------+------------------+
      1 row in set (0.00 sec)
      记录下File和Position两个内容,从库配置的时候会用到这个。
    
    从库配置
     在本机电脑(从库)上找到my.cnf文件,然后添加以下内容,这个配置和主库的配置意思是一样的
    
      server-id=2
      relay-log=slave-relay-bin
      relay-log-index=slave-relay-bin.index
      注意确定和主库的位置一样,我就因为位置放置在末尾导致一直关联不上。
    
    第一次搭建主从需要手动进行数据同步:

    把数据备份到mysql.bak.sql文件

      [root@server01 mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql 
        这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失 
    
    3.查看master 状态
      mysql> show master status; 
      +-------------------+----------+--------------+-------------------------------+ 
      | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
      +-------------------+----------+--------------+-------------------------------+ 
      | mysqld-bin.000001 | 3260 | | mysql,test,information_schema | 
      +-------------------+----------+--------------+-------------------------------+ 
      1 row in set (0.00 sec) 
    
    4.把mysql备份文件传到从库机器,进行数据恢复
    [root@server01 mysql]# mysqldump -uroot -p -hlocalhost > mysql.bak.sql 
    再通过MobaXterm 手动将这个sql文件放入到从Mysql所在服务器的/tmp文件夹下
    
    5.停止从库的状态
        mysql> stop slave; 
    
    6.然后到从库执行mysql命令,导入数据备份
      mysql> source /tmp/mysql.bak.sql 
    
    7.关联主从库
        最后一步很重要,登录从库的MySQL命令行,执行以下代码,主要是关联主库的一些信息。
    
    重启master库:service mysqld restart
    mysql> show master status;  //查看主库的信息
    
      +------------------+----------+--------------+------------------+
    
    | File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |
    
    +------------------+----------+--------------+------------------+
    
    | mysql-bin.000001 |       98 |              |                  |
    
    +------------------+----------+--------------+------------------+
    
    在从库的mysql的命令操作:
      mysql> slave start;
    
     mysql> show slave status\G
    

      change master to master_host='192.168.116.129',   #Master 服务器Ip
      master_port=3306,    
      master_user='root',
      master_password='root', 
      master_log_file='master-bin.000001',  #Master日志文件名 File            
    master_log_pos=98; #Master日志同步开始位置 Position
    

    注意是否执行成功,如果执行失败就好好检查下代码,看看哪里写错了。
    如果执行正常,就启动从库slave,并查看下连接状态。

    需要再mysql命令行执行
    show slave status\G; //查看slave连接状态
    状态信息

               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.116.129 
                  Master_User: test
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 672913
               Relay_Log_File: slave-relay-bin.000044
                Relay_Log_Pos: 504
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
    

    注意!
    这两个状态必须为Yes才算成功,如果不是,则检查上面步骤那一步配置错误。

        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
    
    8.重新开启从同步
       mysql> stop slave; 
    
    9.查看同步状态
      mysql> show slave status\G 查看: 
      Slave_IO_Running: Yes 
      Slave_SQL_Running: Yes 
    

    好了,同步完成啦。

    测试
    现在你在主库上添加一条数据,看看从库上是否有一个相同的数据,如果有则配置正常,功能使用正常。

    主从分离的原理主要是:开启主库的执行日志功能,然后从库读取主库的日志信息,然后将主库执行过的SQL语句在从库上面执行一遍就做到主从分离,主从数据保持一直,备份数据的功能。
    参考原文地址:https://www.jianshu.com/p/65e8a31fbab8
    参考原文地址:https://www.cnblogs.com/sandea/p/5208373.html

    相关文章

      网友评论

          本文标题:Mysql 主从

          本文链接:https://www.haomeiwen.com/subject/okodtqtx.html