zoukankan      html  css  js  c++  java
  • 主从数据库架构

     

    在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。

          MySQL数据库支持数据库的主从复制功能,因此在集群方面具有其独特的优势。众多国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载、数据库热备等功能。本人在实际的Web项目中也涉及到这一需求,在此将如何配置实现做个简单小结。

          1、实验环境

               主库:Ubuntu  IP:192.168.1.189

               从库:Ubuntu  IP:192.168.1.188

          2、主数据库配置

          A、修改配置文件/etc/mysql/my.cnf

          任何一台MySQL数据库服务器都可以配置为集群主服务器,打开MySQL的配置文件,在配置文件中加入下面两行:

          server-id = 1

          log-bin = binlog_repl

          binlog-do-db = test     //设置需要同步的数据库,如果需要设置多个,则加入多条这行语句。

          注:MySQL是通过二进制的日志文件来进行主从数据库复制的,所以必须开启日志功能,即上述的log-bin;另外在集群中,每台数据库服务器都需要指定一个唯一ID,这里我们指定为1。

          给主数据库授权一个可以进行复制的用户,执行如下命令:

          grant replication slave on *.* to 'slave'@'%' identified by '123';

          执行成功后,重启MySQL。

          B、锁定数据库并备份

          mysql>flush tables with read lock;

          备份数据库,传输到从数据库的数据目录下/var/lib/mysql;

          C、用show master status;命令查看主数据库状态

          +--------------------+----------+--------------+------------------+
           | File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
          +--------------------+----------+--------------+------------------+
           | binlog_repl.000001 |      106 | test         |                  |
          +--------------------+----------+--------------+------------------+

           记录下File和Position的值。

           D、主数据库解锁:unlock tables;

          3、从数据库配置

          A、修改配置文件/etc/mysql/my.cnf

           在mysqld下加入如下代码:

          server-id=2

          master-host=192.168.1.189

          master-user=slave

          master-password=123

          保存后,重启mysql服务。

          B、设置slave参数,启动

          在mysql下执行slave stop命令,停止slave服务;

          mysql> change master to

           -> master_host='192.168.1.189',

           -> master_user='slave',

           -> master_password='123',

           -> master_log_file='binlog_repl.000001',

           -> master_log_pos=106;

          注意:这里的master_log_file,master_log_pos的值要和master的值一致。否则会无法同步。

          执行slave start命令,启动服务。

          4、验证同步

          从数据库下运行show slave status G;

          如果能看到:

           Slave_IO_Running: Yes

           Slave_SQL_Running: Yes

          说明已经成功启动了主从数据库的数据同步。

          在主数据库中执行插入语句 insert into user values('kangqing','1234567890');

          在从数据库中执行查询,可以看到主数据库插入的数据已经同步到从数据库表中。

          本人在配置的时候出现过这样的问题:

          Slave_IO_Running和Slave_SQL_Running的值都为Yes,但是无法和主数据库同步。在主数据库插入记录时,从数据库表无任何变化,执行show slave status时可以看到这样的错误:

         Last_SQL_Error: Error 'Table 'user' is read only' on query. Default database: 'test'. Query: 'insert into user values('gaga','5436897')'

         估计是权限问题。

         解决方法:修改/var/lib/mysql文件夹的权限,对mysql.mysql用户赋予读写权限即可。

  • 相关阅读:
    2016"百度之星"
    codeforces 55 div2 C.Title 模拟
    codeforces 98 div2 C.History 水题
    codeforces 97 div2 C.Replacement 水题
    codeforces 200 div2 C. Rational Resistance 思路题
    bzoj 2226 LCMSum 欧拉函数
    hdu 1163 九余数定理
    51nod 1225 余数的和 数学
    bzoj 2818 gcd 线性欧拉函数
    Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学
  • 原文地址:https://www.cnblogs.com/sytfyf/p/4461049.html
Copyright © 2011-2022 走看看