zoukankan      html  css  js  c++  java
  • CentOS7 下搭建MySQL主从数据库

    1.实验环境,数据库的安装https://www.cnblogs.com/luohanguo/p/9045391.html

      我的数据库是分开装的,先拷贝了虚拟机在装的数据库,若果是数据库装好后拷贝好像uuid是一样的,所以会有点问题,不过网上有方法我看见了。

    角色 IP OS/MySQL版本 有无应用数据
    主数据库 192.168.129.128 CentOS7/5.7
    从数据库 192.168.129.129 CentOS7/5.7

    2.主从复制的原理

      从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

      --来自https://blog.csdn.net/php_younger/article/details/59673879

    3.用途

      1)灾备

      2)读写分离

      3)数据备份

    4.差不多MySQL也装好了,开始配置环境

      首先vim /etc/my.cnf,在里面添加(参数都很容易读懂(:就不解释了

    log_bin=master-bin
    server-id=10086 #不要和别的冲突
    expire-logs-days=7
    binlog_ignore_db=mysql
    binlog_ignore_db=information_schema
    binlog_ignore_db=performation_schema
    binlog_ignore_db=sys

      重启mysql服务,service mysqld restart,进入mysql然后show master status; 这两个值下面要用

      为你的从数据库添加用户,密码有要求,不会就Google        Orz

    GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.129.%' identified by ‘password’;

      这时你可以去从数据库那台虚拟机,然后输入下面去尝试连接主数据库,如果连不了可能是Firewall

    mysql -h 主库的ip -P 端口 -u repl -p

      试试下面的和3306做朋友

    # 看看你的mysql端口开了没
    firewall-cmd --list-all 
    # 没有就
    firewall-cmd --permanent --add-port=3306/tcp
    # 重启
    service firewalld restart
    # 应该是有了
    firewall-cmd --query-port=3306/tcp

      在连接下远程数据库,不出意外是可以的!

      在从数据库那机子上的/etc/my.cnf里输入

    server-id = 10087
    relay-log = slave-relay-bin
    relay-log-index = slave-relay-bin.index

      重启服务,然后进入MySQL,然后

    # 执行同步SQL语句
    change master to
    master_host='192.168.129.128',
    master_port=3306, master_user='repl', master_password='密码', master_log_file='master-bin.000001', master_log_pos=上面那个position;

      再start slave;    你可以在输入show slave status G查看状态,如果这两个是true就意味着同步了

      试试啊,去主库闯将数据库,表,添加属性,删除什么的,再去边上瞅瞅,同步了就是ok了

    5.上面已经弄好了,数据库也同步了,那主从复制有什么用呢?

       简单来说,主从复制适合与读多写少的场景,比如这样一个简单的架构相对于单库可用性,性能,容灾都有提升(这就是钞能力吧):

    6.主从数据库可能会发生不一致的问题,那怎么解决呢?

      发生不一致的场景:https://www.2cto.com/database/201702/593470.html

      简单的解决方法:https://www.cnblogs.com/lixiansen/p/5667340.html

      解决方法,划重点,常备份

      6.1 锁库,flush table with read lock;

      6.2 用mysqldump -h 主机名 -P 端口 -u 用户 -p --databases 数据库名 > XXX.sql来备份一个sql文件

      6.3 scp文件名 root@从库ip:/存储路径     再输入你那个root用户的密码

      6.4 查看主库master的状态file,position

      6.5 stop slave; set sql_log_bin=0;

      6.6 source你传过来的sql文件

      6.7  set sql_log_bin=1; flush privileges;

      6.8 重启下service,不知道有没有用

      6.9 设置从库同步,就是那个change master to 再来一遍,记得和6.4的master状态一样

      6.10 start slave; 

      6.11 show slave status G;

    两个都是yes就好了,又同步了!

     

  • 相关阅读:
    SQL错误码
    用collectionview实现瀑布流-转
    iOS开发~CocoaPods使用详细说明
    传值
    iOS 传值方式
    iOS Cocos2d-x 开发环境的搭建
    iOS 高效率编程工具篇
    iOS地图定位系统语言为英文时,返回中文位置信息
    Xcode脚本自动化打包问题:xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
    Cannot create __weak reference in file xxxxxxxxx
  • 原文地址:https://www.cnblogs.com/KuroNJQ/p/11181775.html
Copyright © 2011-2022 走看看