zoukankan      html  css  js  c++  java
  • mysql-读写分离

    在自己操作读写分离之前感觉应该不难,操作之中也确实不能,但是里面都是坑,一下我主要记录一下我做的时候遇到的那些坑。

    1、准备好mysql安装包,请按照:https://www.jianshu.com/p/ea4accd7afb4 连接中的安装方式进行安装。安装完毕并修改完密码,顺便将data文件夹中的auto.cnf删除。

    2、将安装好的赋值一份并修改名字。并按照下图将my.ini修改,同事删除清空data文件夹

     3、如果两个服务都启动就算第一步结束了,可以配置读写分离,若两个服务起不来,那么按以下操作:

      删除安装的mysql程序(安装包不要删除)。其中包括注册表信息和服务

      删除注册表 :windows+R   输入regedit 

        删除:HKEY_LOCAL_MACHINE>SYSTEM>ControlSet001>Services>mysql
        删除:HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Services>mysql

      删除服务:

        windows+R 输入 cmd

        命令窗口输入:sc delete 服务的名字

      截止位置算是清空了所有mysql程序。在次进行安装并复制一份。

    复制中的坑:my.ini里面的内容:请复制

    主库的配置:

    [Client]
    #设置3306端口
    port = 3306
    [mysqld]
    #设置3306端口
    port = 3306
    # 设置mysql的安装目录
    basedir=F:mysql-5.7.25-winx64
    # 设置mysql数据库的数据的存放目录
    datadir=F:mysql-5.7.25-winx64data
    # 允许最大连接数
    max_connections=200
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8
    [mysqld]
    #开启日志
    log-bin=mysql-bin
    #设置服务id,主从不能一致
    server-id=1
    #设置需要同步的数据库
    binlog-do-db=pawn
    #屏蔽系统库同步
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    

      

      

    从库的配置:

    [Client]
    #设置3306端口
    port = 3308
    [mysqld]
    #设置3306端口
    port = 3308
    # 设置mysql的安装目录
    basedir=F:mysql-5.7.25-winx64-fk
    # 设置mysql数据库的数据的存放目录
    datadir=F:mysql-5.7.25-winx64-fkdata
    # 允许最大连接数
    max_connections=200
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8
    [mysqld]
    #开启日志
    log-bin=mysql-bin
    #设置服务id,主从不能一致
    server-id=2
    #设置需要同步的数据库
    replicate_wild_do_table=pawn.%
    #屏蔽系统库同步
    replicate_wild_ignore_table=mysql.%
    replicate_wild_ignore_table=information_schema.%
    replicate_wild_ignore_table=performance_schema.%
    

      

    此时,你的主库可以启动服务,但是从库缺少启动服务入口,使用下面的命令

    命令窗口进入从库中bin文件夹下,执行命令:mysqld install 服务名字 --defaults-file="my.ini的绝对路径";

    此时进入"管理"中会发现你的从库服务,先别急着启动,你还要清空data文件夹(你自己的数据库的所有信息,里面以前有数据的话先备份)中的内容。

    如果此时主库和从库都已经可以访问,那么需要使用sql语句进行主从关联

    主库中执行:

    -- 主库授权

    #授权主备复制专用账号
    GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';

    #刷新权限
    FLUSH PRIVILEGES;

    #确认位点 记录下文件名以及位点
    show master status;

    从库中执行:

    STOP SLAVE;
    CHANGE MASTER TO master_host = 'localhost', master_user = 'db_sync', master_password = 'db_sync', master_log_file = 'mysql‐bin.000002', master_log_pos = 154;
    START SLAVE;
    show slave status;

    完成后,如果执行完毕你需要关注

    从库中一下状态是否与主库一直,并且slave_IO_running   slave_sql_running 是否是 Yes ,如果都没问题(主从库中my.ini中的同步数据确认好,主库和从库一定是提前创建好表),那么你就可以再主库中插入数据啦,刷新从库是否同步。

  • 相关阅读:
    Redis 设计与实现(第三章) -- 链表adlist
    Redis 设计与实现(第二章) -- SDS
    MySQL索引背后的数据结构及算法原理(转)
    MySQL索引原理及慢查询优化(转)
    MySQL常见的一些面试题(未完待续)
    js 获取前天、昨天、今天、明天、后天的时间
    linux 下nohup 使用
    java split 分割字符串用法
    Python 获取URL访问的HEAD头信息
    MySQL日期数据类型、时间类型使用总结
  • 原文地址:https://www.cnblogs.com/gnwzj/p/13158896.html
Copyright © 2011-2022 走看看