mysql读写的实体举例

    作者:课课家教育更新于: 2017-05-04 13:53:49

      MySQL是一个可运行在Windows平台和大多数的Linux平台上的半商业数据库。MySQL的普及很大程度上源于它的宽松,其中MySQL的Windows版本在任何情况下都不免费,而在包括Linux在内的任何UNIX平台下使用MySQL都是免费的。

     mysql读写的实体举例_ mysql_数据库_Linux_课课家
      一个完整的MySQL读写分离环境包括以下几个部分:
      应用程序client
      database proxy(MySQL Proxy是一个处于你的client端和MySQL Server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
      MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
      MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。)
      database集群(数据库集群,顾名思义,就是利用至少两台或者多台数据库服务器,构成一个虚拟单一数据库逻辑映像,像单数据库系统那样,向客户端提供透明的数据服务。
      这里有两个关键点:
      1.两台或者多台数据库服务器:如果只有一台数据库服务器是不能称其为集群的。
      2.透明的服务:集群向客户端提供的服务与单机系统向客户端提供的服务,从通讯协议上保持二进制兼容。)
      在本次实战中,应用程序client基于c3p0连接后端的database proxy。database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba。database集群采用mysql的master-slave的replication方案。整个环境的结构图如下所示:

    在本次实战中,应用程序client基于c3p0连接后端的database proxy。database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba。database集群采用mysql的master-slave的replication方案。整个环境的结构图如下所示:
      实战步骤与详解
      一.搭建mysql的master-slave环境
      1)分别在host1(10.20.147.110)和host2(10.20.147.111)上安装mysql(5.0.45),具体安装方法可见官方文档
      2)配置master
      首先编辑/etc/my.cnf,添加以下配置:
      log-bin=mysql-bin #slave会基于此log-bin来做replication
      server-id=1 #master的标示
      binlog-do-db = amoeba_study #用于master-slave的具体数据库
      然后添加专门用于replication的用户:
      mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.20.147.111 IDENTIFIED BY '111111';
      重启mysql,使得配置生效:
      /etc/init.d/mysqld restart
      最后查看master状态:

    实战步骤与详解 一.搭建mysql的master-slave环境 1)分别在host1(10.20.147.110)和host2(10.20.147.111)上安装mysql(5.0.45),具体安装方法可见官方文档 2)配置master
      MySQL客户库是客户/服务器结构的c语言库,它意味着一个客户能查询驻留在另一台机器的一个数据库。然而MySQL真正的强项在于该库中的语言包装器,Perl、Pathon和php只是一部分。Apache的Web服务器也有许多模块,例如目录存取文件等允许各种各样的Apache配置信息。使用MySQL,应用程序接口简单、一致并且相当完整,而且多平台ODBC驱动程序都能够自由获得。
      MySQL包含一些与SQL标准不同的转变,大多数被设计成是对SQL脚本语言的不足的一种补充。但是另一些扩展确实使MySQL与众不同,例如LINK子句搜索是自动地忽略大小写的。而且MySQL也允许用户自定义SQL函数,也就是一个程序员可以编写一个函数然后集成到MySQL中,其表现与任何基本函数没有什么不同。
      MySQL可以说是数据库领域的中间派,它缺乏一个全功能数据库的大多数主要特征,但是又有比类似Xbase记录存储引擎更多的特征。它需要一个服务守护程序,但是不像它们那样消费资源;查询语言允许复杂的连接查询,但是MySQL的主要的缺陷之一是缺乏标准的参考完整性机制,所有的参考完整必须由程序员强制保证。可能有些数据库管理员会觉得系统缺乏主要数据库功能,但是MySQL对简单数据库是有其价值的。
      3)配置slave
      首先编辑/etc/my.cnf,添加以下配置:
      server-id=2 #slave的标示
      配置生效后,配置与master的连接:
      mysql> CHANGE MASTER TO
      -> MASTER_HOST='10.20.147.110',
      -> MASTER_USER='repl',
      -> MASTER_PASSWORD='111111',
      -> MASTER_LOG_FILE='mysql-bin.000003',
      -> MASTER_LOG_POS=161261;
      其中MASTER_HOST是master机的ip,MASTER_USER和MASTER_PASSWORD就是我们刚才在master上添加的用户,MASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息
      最后启动slave:
      mysql> start slave;
      4)验证master-slave搭建生效
      通过查看slave机的log(/var/log/mysqld.log):
      100703 10:51:42 [Note] Slave I/O thread: connected to master 'repl@10.20.147.110:3306', replication started in log 'mysql-bin.000003' at position 161261
      如看到以上信息则证明搭建成功,如果有问题也可通过此log找原因
      二.搭建database proxy
      此次实战中database proxy采用amoeba ,它的相关信息可以查阅官方文档,不在此详述
      1)安装amoeba
      下载amoeba(1.2.0-GA)后解压到本地(D:/openSource/amoeba-mysql-1.2.0-GA),即完成安装
      2)配置amoeba
      先配置proxy连接和与各后端mysql服务器连接信息(D:/openSource/amoeba-mysql-1.2.0-GA/conf/amoeba.xml):

    [xhtml] view plaincopy 
      
          
        8066  
          
          
          
          
        20  
          
          
        30  
          
          
        30  
          
          
        128  
          
          
        true  
          
          
        root  
          
          
        root  
      

      以上是proxy提供给client的连接配置

    xhtml] view plaincopy 
      
                   
              
              
                defaultManager  
                  
                  
                3306  
                  
                  
                10.20.147.110  
                amoeba_study  
                  
                  
                root  
                  
                  
                  
                  
              
              
              
              
                200  
                200  
                10  
                600000  
                600000  
                true  
                true  
              
          
          
              
              
              
                defaultManager  
                  
                  
                3306  
                  
                  
                10.20.147.111  
                amoeba_study  
                  
                  
                root  
                  
                  
                  
                  
              
              
              
              
                200  
                200  
                10  
                600000  
                600000  
                true  
                true  
              
                 
      

      以上是proxy与后端各mysql数据库服务器配置信息,具体配置见注释很明白了
      最后配置读写分离策略:

    [xhtml] view plaincopy 
      
        1500  
        server1  
        server1  
        server2  
        true  
      

      从以上配置不然发现,写操作路由到server1(master),读操作路由到server2(slave)
      3)启动amoeba
      在命令行里运行D:/openSource/amoeba-mysql-1.2.0-GA/amoeba.bat即可:
      log4j:WARN log4j config load completed from file:D:/openSource/amoeba-mysql-1.2.0-GA/conf/log4j.xml
      log4j:WARN ip Access config load completed from file:D:/openSource/amoeba-mysql-1.2.0-GA/conf/access_list.conf
      2010-07-03 09:55:33,821 INFO net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.
      三.client端调用与测试
      1)编写client调用程序
      具体程序细节就不详述了,只是一个最普通的基于mysql driver的jdbc的数据库操作程序
      2)配置数据库连接
      本client基于c3p0,具体数据源配置如下:

    [xhtml] view plaincopy 
      
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
      

      值得注意是,client端只需连到proxy,与实际的数据库没有任何关系,因此jdbcUrl、user、password配置都对应于amoeba暴露出来的配置信息
      3)调用与测试
      首先插入一条数据:insert into zone_by_id(id,name) values(20003,'name_20003')
      通过查看master机上的日志/var/lib/mysql/mysql_log.log:
      100703 11:58:42 1 Query set names latin1
      1 Query SET NAMES latin1
      1 Query SET character_set_results = NULL
      1 Query SHOW VARIABLES
      1 Query SHOW COLLATION
      1 Query SET autocommit=1
      1 Query SET sql_mode='STRICT_TRANS_TABLES'
      1 Query SHOW VARIABLES LIKE 'tx_isolation'
      1 Query SHOW FULL TABLES FROM `amoeba_study` LIKE 'PROBABLYNOT'
      1 Prepare [1] insert into zone_by_id(id,name) values(?,?)
      1 Prepare [2] insert into zone_by_id(id,name) values(?,?)
      1 Execute [2] insert into zone_by_id(id,name) values(20003,'name_20003')
      得知写操作发生在master机上
      通过查看slave机上的日志/var/lib/mysql/mysql_log.log:
      100703 11:58:42 2 Query insert into zone_by_id(id,name) values(20003,'name_20003')
      得知slave同步执行了这条语句
      然后查一条数据:select t.name from zone_by_id t where t.id = 20003
      通过查看slave机上的日志/var/lib/mysql/mysql_log.log:
      100703 12:02:00 33 Query set names latin1
      33 Prepare [1] select t.name from zone_by_id t where t.id = ?
      33 Prepare [2] select t.name from zone_by_id t where t.id = ?
      33 Execute [2] select t.name from zone_by_id t where t.id = 20003
      得知读操作发生在slave机上
      并且通过查看slave机上的日志/var/lib/mysql/mysql_log.log发现这条语句没在master上执行
      通过以上验证得知简单的master-slave搭建和实战得以生效
      补充:与分布式数据库系统的区别
      数据库集群有的具有单份数据集,有的具有两份或多份相似的数据集,有的具有两份或多份实时一致的数据集;而分布式数据库系统往往具有完全不同的数据集。
      数据库集群往往是同构的系统,要求集群各节点都具有相同的操作系统和数据库系统版本,甚至补丁包的版本也要求保持一致;而分布式数据库系统可以是异构系统,包含不同的操作系统和不同的数据库系统。
      数据库集群往往建立在高速局域网内;而分布式数据库系统既可以是高速局域网,也可以是跨部门、跨单位的异地远程网络。
      数据库集群的技术指标
      由于数据库系统是任何一个信息系统的核心,因此除了业务逻辑之外,用户还关心下面三点:
      1.系统性能
      性能问题涉及硬件、软件、网络、应用设计架构、代码质量等多方面。但是数据库集群如果能提供负载均衡能力和自动优化能力,则是对整个系统性能具有莫大的好处。
      2.数据可靠性
      在系统发生任意故障(包括操作系统、数据库引擎、硬盘或磁盘阵列或存储网络等故障)条件下数据丢失的可能性。有的系统从设计原理上注定了必然会存在理论上的数据丢失可能性,而有的系统因为冗余设计原理,可以保证理论上的数据零丢失。用容灾领域的术语来讲,这类似于RPO(Recovery Point Objective),但是不完全等同于RPO。
      3.服务可用性
      在系统发生任意故障(包括操作系统、数据库引擎、硬盘或磁盘阵列或存储网络等故障)条件下整个系统停止对外提供数据服务的可能性。与上面的数据库可靠性紧密关联,如果一个系统从理论上存在数据丢失的可能性,那么这样的系统必然会导致整个系统的服务停止。同样地,用容灾领域的术语来讲,这类似于RTO(Recovery Time Objective),但是也同样不能完全等同于RTO。
      以上就是关于数据的知识点了。喜欢的可以分享给你的朋友,也可以点赞噢~更多内容,就在课课家!

课课家教育

未登录