zoukankan      html  css  js  c++  java
  • mysql配置主从数据库

    1.目的

      1.1 实现数据备份

      1.2 项目访问时可以实现读写分离,提高访问和操作数据的速度<读写分离好处>

    2.背景

      这次的主从配置主要实现主库数据的改变可以实现同步到从库中;

      此次试验的主库为liunx<ubuntu4.8.2> 下mysql 5.6.19,从库为windows10 下mysql 5.6.24;

     3.准备知识

      3.1 在liunx下mysql的配置文件为:

      /etc/mysql/my.conf

      3.2 在windows下mysql的配置文件为:

      mysqlpath/my.ini

        3.3 在不同的系统环境下,配置的文件的路径和后缀名是不同的;

      3.4 在liunx系统环境下,mysql 服务的启动关闭重启的命令如下:

      sudo start mysql; //启动服务
      sudo stop mysql; //关闭服务
      sudo restart mysql; //重启

     

       3.5 每次修改配置文件,需要重启服务再查看结果

    4. 配置主从数据库

      4.1 打开3306端口,可以允许远程访问主库端口;

        a.首先查看端口是否打开

        netstat -an|grep 3306

        上图是打开的情况下的数据展示,如果没有打开会出现 127.0.0.1 的数据;如果没有打开,则需要到 /etc/mysql/my.conf 中将bind-address = 127.0.0.1 注销

      #bind-address = 127.0.0.1 //注销示例
      bind-address = 127.0.0.1

        重启服务查看端口是否打开;

        b.设置远程可以访问mysql数据库的权限

          进入主库使用sql命令设置权限,如下:    

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | cmdb               |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    rows in set (0.00 sec)
    
    mysql> use mysql;
    Database changed
    mysql> update user set host='%' where user='root';
    ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' //虽然报错,但实际更新成功;
    // 备选 mysql>grant all privileges on *.* to 'root'@'%' identified by 'xxxxxx';

        

        打开另一个终端,执行如下命令:

    [root@zhoujietest ~]#mysql -u root
    
    mysql>delete from user where user='';
    
    mysql>flush privileges; #刷新权限
    
    mysql>q

        重启服务,执行如下命令查看权限赋予情况:

    mysql>mysql -u root -p 
    mysql>use mysql; 
    mysql>selsct user,host from user;

        可得到如下数据:

        host中%表示可以远程使用root账号访问;

      4.2 配置mysql主从配置文件

        主库:192.168.0.175

        从库:192.168.0.170

        a.主库配置 </etc/mysql/my.conf>

        *添加的配置必须在[mysqld]范围内,不然无法启动服务
        [mysqld]     log-bin=mysql-bin     server-id=1     binlog-do-db = cmdb //需要同步的数据库     #binlog-ignore-db = nodb //不需要同步的数据库

        修改后重启服务,查看主库设置情况,如下:

    mysql> show master status;
    +---------------+----------+--------------+------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +---------------+----------+--------------+------------------+
    | binlog.000001 |     1304 | cmdb         |                  |
    +---------------+----------+--------------+------------------+
    row in set (0.00 sec)

        b.从库配置i<mysqlpath/my.ini>

        设置配置文件:  

    [mysqld]
    server-id=2 //服务器id,区别于主库的server-id
    master-host=192.168.0.175 //主库ip
    master-user=rep1 //5.5-
    master-password=test123456 //5.5-
    master-port=3306 //5.5-
    replicate-do-db=cmdb //5.5-
    ......

        配置文件除server-id外,mysql 5.5+ 版本需要在命令行中设置其余属性:

    mysql> CHANGE MASTER TO
        ->     MASTER_HOST='master_host_name',
        ->     MASTER_USER='replication_user_name',
        ->     MASTER_PASSWORD='replication_password',
        ->     MASTER_LOG_FILE='recorded_log_file_name',//数据需要同show master status 中的数据一致
        ->     MASTER_LOG_POS=recorded_log_position;//数据需要同show master status 中的数据一致

        启动slave进程

    mysql> start slave;
    Query OK, 0 rows affected (0.04 sec)

      

        查看slave的状态,如果下面两项值为YES,则表示配置正确:

        Slave_IO_Running: Yes
    
        Slave_SQL_Running: Yes

        c.将主库已有数据复制到从库

          ca.命令复制

          主库:    

          mysql>flush tables with read lock;//停止主库的数据更新操作

          打开新的终端:

        [root@zhoujietest ~]# mysqldump -uroot -ptest123 cmdb > cmdb.sql //生成主数据库的备份(导出数据库)
        [root@zhoujietest ~]# scp cmdb.sql root@192.168.0.170:/root/ //将备份文件传到从库
        mysql>unlock tables;//主库解锁

          

          从库:

    mysql>slave stop;//停止从库slave
    mysql> create database cmdb default charset utf8;//新建数据库cmdb
    [root@ops-dev ~]# mysql -uroot -ptest123 cmdb<cmdb.sql //导入数据
    mysql> show databases;//查看从库已有该数据库和数据 
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | cmdb               |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+

          cb.使用工具<Navicat>直接从主库复制到从库中

        d.主库数据更改后,从库自动更新。

     5. 后续问题

      从库修改数据后,会导致从库同步主库出错,无法同步到主库的数据;

      解决方案:重新配置从库数据,重新导入数据,重启服务。

    6.项目配置读写分离

      移步:http://www.cnblogs.com/springlight/p/5905720.html

    参考资料:

      1.http://www.cnblogs.com/zhoujie/p/mysql1.html

      2.http://dev.mysql.com/doc/refman/5.6/en/replication-howto.html

      3.http://www.linuxdiyf.com/linux/15206.html

      4.http://www.cnblogs.com/linjiqin/p/5270938.html

    能力有限,文档可能存在不当之处,各位指正。

  • 相关阅读:
    哈工大中文篇章关系语料
    MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事
    MongoDB学习笔记~为IMongoRepository接口更新指定字段
    MongoDB学习笔记系列
    MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动
    MongoDB学习笔记~为IMongoRepository接口添加了排序和表达式树,针对官方驱动
    Android NDK入门实例 计算斐波那契数列二生成.so库文件
    Spring Autowire自动装配
    在gem5的full system下运行 alpha编译的测试程序 running gem5 on ubuntu in full system mode in alpha
    工厂三兄弟之抽象工厂模式(二)
  • 原文地址:https://www.cnblogs.com/springlight/p/6287985.html
Copyright © 2011-2022 走看看