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用户赋予读写权限即可。

  • 相关阅读:
    XML文件的操作说明
    IIS中如何应用程序启用https协议
    sql server中的数据类型转换函数
    sql语句中的join连接(左连接、右连接、全连接、内连接)
    sql语句中日期相减的操作
    C# NameValueCollection集合
    json的两种表示结构(对象和数组).。
    ASP.NET中一般处理程序报的错误:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
    C#中类的实例是不能 获取到类中的静态方法和静态变量(Static)的,及原因
    《好好学Java 从零基础到项目实战》姗姗而来
  • 原文地址:https://www.cnblogs.com/quchengfeng/p/4915012.html
Copyright © 2011-2022 走看看