文档库 最新最全的文档下载
当前位置:文档库 › 数据库读写分离解决方案--DG实施方案

数据库读写分离解决方案--DG实施方案

数据库读写分离解决方案--DG实施方案
数据库读写分离解决方案--DG实施方案

数据库读写分离解决方案

----oracle 11G ADG实施方案

1.项目背景介绍

1.1目的

通过DG实现主库与备库同步,主库作为业务应用库,备库作为查询库,应用根据不同需求配置对应数据库;

1.2测试环境

在2台RedHat5.4上使用ORACLE 的DataGuard组件实现容灾。设备配置(VMWare虚拟机环境)清单如下:

2.Oracle DataGuard 介绍

备用数据库(standby database)是ORACLE 推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。

●STANDBY DATABASE的类型:

有两种类型的STANDBY:物理STANDBY和逻辑STANDBY

两种类型的工作原理可通过如下图来说明:

physical standby提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是可以直接应用REDO实现同步的。

l ogical standby则不是这样,在logical standby中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表,但其数据库用户相关对象均需要有主键。

?本次实施将选择物理STANDBY(physical standby)方式

●对主库的保护模式可以有以下三种模式:

–Maximum protection (最高保护)

–Maximum availability (最高可用性)

–Maximum performance (最高性能)

?基于项目应用的特征及需求,本项目比较适合采用Maximum availability (最

高可用性)模式实施。

3.Dataguard 实施前提条件和注意事项:

●灾备环境中的所有节点必须安装相同的操作系统,尽可能令详细补丁也保持相

同。

●灾备环境中的所有节点必须安装完全相同版本的Oracle数据库软件,包括版本

号和发布号,比如必须都是Oracle 11.2.0.1

●主库必须处于归档(ARCHIVELOG)模式。

●灾备环境中所有节点的硬件和操作系统架构必须相同

●主库可以是单实例,也可以是RAC。

●主节点和备用节点之间的硬件配置可以不同,比如CPU数量,内存数量,存

储的配置等等。

●配置灾备环境的数据库用户必须具有SYSDBA权限。

4.Oracle软件安装

1.要实施DataGurad的前,需要在主机RedHat-Primary和备机RedHat-Standby上进行

ORACLE软件的基础安装。

2.备机基础软件的安装有两种方式供选择:

1)源始安装介质安装

采用ORACLE数据库安装介质进行软件安装。

2)“克隆”主站源数据库

分别对主站源数据库进行tar压缩并FTP/rcp至备机上,然后展开压缩文

件。

通常出于便捷的原因,备机的Oracle初始建立可采用上述的第二种方式。

测试环境中直接对虚拟机进行了拷贝,因此相当于采用了第二种方式。现场环境

下,如果主节点不是RAC环境,也可以采用第二种方式。

4.1环境配置

RedHat5-Primary (primary , IP 192.168.204.131)以下简称主库

4.2系统硬件环境检查

4.2.1检查内存相关项

检查服务器的内存,可以通过下列命令:

[root@localhost ~]# grep MemTotal /proc/meminfo

另外与内存相关的swap 交换分区的设置也很重要,通常有下列的规则:实际内存建议swap 交换空间大小

-------------- -----------------------------

1G-2G 1.5 倍于内存

2G-16G 与内存相同

超过16G 设置为16G 即可

查看当前服务器swap 交换分区大小,可以通过下列命令:

[root@localhost ~]# grep SwapTotal /proc/meminfo

查看系统当前共享内存,可以通过df 命令,例如:

[root@localhost ~]# df -h /dev/shm

4.2.2查看系统架构

本步用来查看处理器的架构类型,需要确认ORACLE 安装包与处理器架构相符,不然安装时必然报错。查看当前系统的处理器架构可以通过下列命令:

[root@localhost ~]# uname –m

i686

4.2.3检查磁盘空闲空间

首先/tmp 至少要有1g 的空闲空间,查看/tmp 的磁盘空间,也可以通过df 命令查看,例如:

[root@localhost ~]# df -h /tmp

在执行安装之前,建议执行df -h 命令,查看当前是否有充裕的空闲空间来安装和创建数据库。

[root@jssnode1 ~]# df –h

4.3安装操作系统软件包

(32位RedHat5.4)

binutils-2.17.50.0.6

compat-libstdc++-33-3.2.3

elfutils-libelf-0.125

elfutils-libelf-devel-0.125

elfutils-libelf-devel-static-0.125

gcc-4.1.2

gcc-c++-4.1.2

glibc-2.5-24

glibc-common-2.5

glibc-devel-2.5

ksh-20060214

libaio-0.3.106

libaio-devel-0.3.106

libgcc-4.1.2

libgomp-4.1.2

libstdc++-4.1.2

libstdc++-devel-4.1.2

make-3.81

sysstat-7.0.2

查看软件包是否已经安装:

[root@localhost ~]# rpm -aq binutils compat-libstdc++-33

[root@localhost ~]# rpm -aq | grep elfutils-libelf

[root@localhost ~]# rpm -aq | grep gcc

[root@localhost ~]# rpm -aq | grep glibc

[root@localhost ~]# rpm -aq | grep ksh

[root@localhost ~]# rpm -aq | grep libaio

[root@localhost ~]# rpm -aq | grep libgcc

[root@localhost ~]# rpm -aq | grep libgomp

[root@localhost ~]# rpm -aq | grep libstdc++

[root@localhost ~]# rpm -aq | grep make-3

[root@localhost ~]# rpm -aq | grep sysstat

[root@localhost ~]# rpm -aq | grep unixODBC

通过以上命令来查看是否有未安装的软件包,可将未安装的软件包放到~/rpm下,因有些包会相互依赖,最简单的方式是将rpm包下的软件包一起安装:

[root@localhost ~]#cd rpm

[root@localhost rpm]#pwd

/root/rpm

[root@localhost rpm]#ls

compat-libstdc++-33-3.2.3-61.i386.rpm

elfutils-libelf-devel-0.137-3.el5.i386.rpm

elfutils-libelf-devel-static-0.137-3.el5.i386.rpm

gcc-4.1.2-46.el5.i386.rpm

gcc-c++-4.1.2-46.el5.i386.rpm

glibc-devel-2.5-42.i386.rpm

glibc-headers-2.5-42.i386.rpm

kernel-headers-2.6.18-164.el5.i386.rpm

libaio-devel-0.3.106-3.2.i386.rpm

libgomp-4.4.0-6.el5.i386.rpm

libstdc++-devel-4.1.2-46.el5.i386.rpm

sysstat-7.0.2-3.el5.i386.rpm

unixODBC-2.2.11-7.1.i386.rpm

unixODBC-devel-2.2.11-7.1.i386.rpm

[root@localhost rpm]#rpm –Uvh *

64位需安装的操作系统软件包

binutils-2.17.50.0.6

compat-libstdc++-33-3.2.3

compat-libstdc++-33-3.2.3 (32 bit)

elfutils-libelf-0.125

elfutils-libelf-devel-0.125

gcc-4.1.2

gcc-c++-4.1.2

glibc-2.5-24

glibc-2.5-24 (32 bit)

glibc-common-2.5

glibc-devel-2.5

glibc-devel-2.5 (32 bit)

glibc-headers-2.5

ksh-20060214

libaio-0.3.106

libaio-0.3.106 (32 bit)

libaio-devel-0.3.106

libaio-devel-0.3.106 (32 bit)

libgcc-4.1.2

libgcc-4.1.2 (32 bit)

libstdc++-4.1.2

libstdc++-4.1.2 (32 bit)

libstdc++-devel 4.1.2

make-3.81

sysstat-7.0.2

unixODBC-2.2.11

unixODBC-2.2.11 (32 bit)

unixODBC-devel-2.2.11

unixODBC-devel-2.2.11 (32 bit)

4.4修改内核参数

下列将要进行配置的核心参数均拥有默认值(或者说最小值),需要对其进行配置的原因,是为了获得更好了性能,因此对于产品服务器来说,务必根据实际情况进行配置,不适当的值反倒可能适得其反。

使用vi 命令编辑/etc/sysctl.conf 文件,例如:

[root@localhost ~]# vi /etc/sysctl.conf

将下列内容加入该文件:

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 536870912

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

注意,某些参数可能已经存在于该文件,注意修改参数值即可。这里各参数所指定的值仅供参考,请根据实际情况进行修改,一般来说只需要对kernel.shmmax 这个参数的参数值进行修改即可,该参数建议修改为物理内存的一半(以字节为单位)。

编辑完之后存盘退出,然后运行下列命令重新加载并验证参数是否正确:

[root@jssnode1 ~]# sysctl -p

4.5修改系统时间

修改主机与备机的系统时间一致

4.6创建用户和组及安装目录并配置环境变量

创建用户和组:

[root@localhost ~]# groupadd oinstall

[root@localhost ~]#groupadd dba

[root@localhost ~]#useradd -g oinstall -G dba oracle

[root@localhost ~]#passwd oracle

验证nobody用户:

[root@localhost ~]#id nobody

创建Oracle的安装目录:

注: (因虚拟机环境安装Linux时没有手动分区,导致挂载点” /”空间不足,所以将oracle安装到了/home/db下,现场环境下Oracle应安装到/opt或单独分区)

[root@localhost ~]# cd /home

[root@localhost home]#mkdir db

改变文件系统/home/db的所有者为oracle,以便将Oracle安装到此目录

[root@localhost home]#chown oracle:oinstall db

切换到oracle用户,修改.bash_profile

[oracle@localhost ~]$ vi .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs ORACLE_SID=orcl

ORACLE_BASE=/home/db/oracle

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_SID ORACLE_BASE ORACLE_HOME export LD_ASSUME_KERNEL=2.6.18

export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" umask 022

PATH=$PATH:/$ORACLE_HOME/bin:$HOME/bin export PATH

4.7安装Oracle数据库

本节略

5.配置DataGuard过程

5.1备注

“SQL>”:表示在sqlplus环境下执行,通常是以sysdba身份登录来执行命令

“$”或” [oracle@localhost ~]$”:表示在命令行中执行的命令

5.2判断DataGuard是否安装

SQL>select * from v$option where parameter = 'Oracle Data Guard’; 5.3网络配置

192.168.204.131(orcl)------------------------------------192.168.204.132(orcldg)

5.4监听配置

主库

[oracle@localhost ~]$ cd $ORACLE_HOME/network/admin

[oracle@localhost admin]$ vi listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.131)(PORT = 1521)) )

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(SID_NAME = orcl)

(ORACLE_HOME = /home/db/oracle/product/11.2.0/db_1)

)

)

注意:SID_LIST_LISTENER 配置的是静态注册,如果没有该参数,而且Data Guard 启动顺序又不正确,那么在主库可能会报 PING[ARC1]: Heartbeat failed to connect to standby 'orcl_st'. Error is 12514. 错误,导致归档无法完成。

[oracle@localhost admin]$ vi tnsnames.ora

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.131)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

ORCLDG =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.132)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcldg)

)

)

备库

[oracle@localhost admin]$ vi listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.132)(PORT = 1521))

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = orcldg)

(SID_NAME = orcl)

(ORACLE_HOME = /home/db/oracle/product/11.2.0/db_1)

)

)

[oracle@localhost admin]$ vi tnsnames.ora

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.131)(PORT = 1521)) )

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

ORCLDG =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.132)(PORT = 1521)) )

(CONNECT_DATA =

(SERVICE_NAME = orcldg)

)

)

5.5主库前期准备

设置强制写日志

SQL> select FORCE_LOGGING from v$database;

NO

SQL> alter database force logging;

SQL> select FORCE_LOGGING from v$database;

YES

5.6创建口令文件并将文件传输到备库

在主库上创建密码文件,并将文件传到备库的相关位置

[oracle@localhost dbs]$ pwd

/home/db/oracle/product/11.2.0/db_1/dbs

[oracle@localhost bin]$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle

[oracle@localhost bin]$ cd $ORACLE_HOME/dbs/

[oracle@localhost dbs]$ ls

缺省情况下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)

传送文件:

[oracle@localhost dbs]$scp -cp orapworcl oracle@192.168.204.132://home/db/oracle/product/11.2.0/db_1/dbs

orapworcl 100% 1536 1.5KB/s 00:00 [oracle@localhost dbs]$

5.7创建备份库需要的控制文件并传输到备库

创建控制文件

SQL>shutdown immediate

SQL>startup mount;

SQL>alter database create standby controlfile as '/tmp/stdby_control01.ctl'; SQL>alter database open;

$scp -rp /tmp/stdby_control01.ctl

oracle@192.168.204.132://home/db/oracle/oradata/ORCL/controlfile/

$scp -rp /tmp/stdby_control01.ctl

oracle@192.168.204.132://home/db/oracle/flash_recovery_area/ORCL/controlfile/

-----------------------------------------------------------

手工复制几份(未执行)

$ cd /tmp/

$ cp sdtby_control01.ctl stdby_control02.ctl

$ cp sdtby_control01.ctl stdby_control03.ctl

----------------------------------------------------------------------------------------

5.8修改主库初始化参数

创建主库pfile

sql > create pfile from spfile;

修改pfile

[oracle@localhost dbs]$vi initorcl.ora

*.db_unique_name=orcl

*.log_archive_config='dg_config=(orcl,orcldg)'

*.log_archive_dest_1='location=/home/db/oracle/oradata/ORCL/archive

valid_for=(all_logfiles,all_roles) db_unique_name=orcl'

*.log_archive_dest_2='service=orcldg lgwr async

valid_for=(online_logfiles,primary_role) db_unique_name=orcldg'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=defer

*.log_archive_format=%t_%s_%r.arc

*.fal_server=orcldg

*.fal_client=orcl

*.standby_file_management=auto

pfile 拷贝到备库上

[oracle@localhost dbs]$scp –rp

/home/db/oracle/product/11.2.0/db_1/dbs/initorcl.ora

oracle@192.168.204.132:/home/db/oracle/product/11.2.0/db_1/dbs/

创建主库spfile

SQL>Shutdown immediate

SQL>startup pfile='//home/db/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

SQL> create spfile from pfile='//home/db/oracle/product/11.2.0/db_1/dbs/initorcl.ora'; SQL> shutdown immediate;

SQL > startup

5.9修改数据库运行在归档模式下

SQL > SHUTDOWN IMMEDIATE;

SQL > STARTUP MOUNT;

SQL > ALTER DATABASE ARCHIVELOG;

SQL > ALTER DATABASE OPEN;

5.10备份生产数据库

$scp -rp /home/db/oracle/oradata/ORCL oracle@192.168.204.132://home/db/oracle/oradata/ $scp –rp /home/db/oracle/admin/orcl oracle@192.168.204.132://home/db/oracle/admin

5.11修改备库pfile

[oracle@localhost dbs]$vi initorcl.ora

*.db_unique_name=orcldg

*.log_archive_config='dg_config=(orcldg,orcl)'

*.log_archive_dest_1='location=/home/db/oracle/oradata/ORCL/archive

valid_for=(all_logfiles,all_roles) db_unique_name=orcldg'

*.log_archive_dest_2='service=orcl lgwr async

valid_for=(online_logfiles,primary_role) db_unique_name=orcl'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.log_archive_format=%t_%s_%r.arc

*.fal_server=orcl

*.fal_client=orcldg

*.standby_file_management=auto

*.control_files='/home/db/oracle/oradata/ORCL/controlfile/stdby_control01.c tl','/home/db/oracle/flash_recovery_area/ORCL/controlfile/stdby_control01.c tl'

5.12在备库上创建spfile

sql>shutdown immediate

sql>create spfile from pfile;

5.13启动物理备用数据库

SQL>startup nomount

SQL>alter database mount standby database;

5.14配置Standby Redo Log

在两边都配置standby redo log

在主库查看日志组的数量和每个日志文件的大小

SQL> SELECT GROUP#, BYTES FROM V$LOG;

在备库库查看日志组的数量和每个日志文件的大小

SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG;

在主备库创建日志组和redo log文件

SQL> ALTER DATABASE ADD STANDBY LOGFILE group 4('/home/db/oracle/product/11.2.0/db_1/dbs/slog4.rdo') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE group 5 ('/home/db/oracle/product/11.2.0/db_1/dbs/slog5.rdo') SIZE 50M;

SQL>ALTER DATABASE ADD STANDBY LOGFILE group 6 ('/home/db/oracle/product/11.2.0/db_1/dbs/slog6.rdo') SIZE 50M;

SQL>ALTER DATABASE ADD STANDBY LOGFILE group 7('/home/db/oracle/product/11.2.0/db_1/dbs/slog7.rdo') SIZE 50M;

备注:

删除日志组redo log文件的方法

SQL>ALTER DATABASE DROP STANDBY LOGFILE GROUP N;(N代表数字)

5.15Start Redo Apply

在主数据库上设置DataGuard的保护模式.把主数据库启动到mount状态设置好DataGuard 的保护模式.

SQL>alter system set log_archive_dest_state_2=ENABLE scope=both;

SQL>shutdown immediate;

SQL>startup mount;

SQL>alter database set standby database to maximize availability;

SQL>alter database open;

在备用数据库上启动日志传输

#实时应用日志

SQL>alter database recover managed standby database using current logfile disconnect from session;

查看哪些归档日志被APPLY了

SQL>select sequence#,applied from v$archived_log order by sequence#;

在主库

强制日志切换到当前的online redo log file.

SQL>alter system archive log current;

在备库

查看新的被归档的redo data

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

在备库查看接收到的被应用的redo

SQL> select sequence#,applied from v$archived_log order by sequence#;

查看数据库的角色

SQL>select database_role,protection_mode,protection_level from v$database;

在主库查看日志传送情况

SQL> Select dest_name,status,error from v$archive_dest;

DEST_NAME STATUS ERROR

-------------------- --------- -------------------------------------------------

LOG_ARCHIVE_DEST_1 VALID

LOG_ARCHIVE_DEST_2 VALID

31 rows selected.

两个节点都正常。

验证同步情况

在主库切换日志:

SQL> alter system switch logfile;

System altered.

SQL> select sequence# from v$archived_log; SEQUENCE#

----------

15

16

SQL> alter system switch logfile;

System altered.

SQL> select sequence# from v$archived_log;

SEQUENCE#

----------

17

18

在备库进行验证:

SQL> select sequence#,applied from v$archived_log;

SEQUENCE# APP

---------- ---

13 YES

4 NO

14 YES

15 YES

16 YES

18 NO

16 YES

配置amoeba实现读写分离

配置amoeba实现读写分离 配置环境: Mater :192.168.1.229 server1 读 Slave :192.168.1.181 server2 写 网站主机: 192.168.1.120 测试读写 一,配置mysql主从复制:请见另外一个文档。 二,配置jdk环境变量。 Amoeba框架是基于Java SE1.5开发的,建议使用Java SE 1.5版本。目前Amoeba 经验证在JavaTM SE 1.5和Java SE 1.6能正常运行,(可能包括其他未经验证的版本)。 变量设置(在master主机上配置),此处可以设置全局环境变量设置,也可使用root 用户变量设置,同样,如果是别的用户安装的amoeba软件,则使用相应的账号来设置jdk环境变量。 全局设置如下:加入下信息: vi /etc/profile JAVA_HOME=/usr/local/jdk1.6.0_25 PATH=$JAVA_HOME/bin:$PATH PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH 解释如下:第一行指定了jdk的安装目录。 第二行指定了其家目录的路径。 第三行指定了amoeba的安装目录。 第四行指定了java相应的工具盒功能。 同样,如果是root用户的环境变量,则使用下面的位置的变量。 vi ~/.bash_profile 加入如上得到内容即可。 完成之后,执行命令 source ~/.bash_profile 或者source /etc/profile 使用如下的命令查看java手否被成功安装: [root@localhost ~]# java -version java version "1.6.0_25" Java(TM) SE Runtime Environment (build 1.6.0_25-b06) Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing) 上述显示已经成功安装1.6版本。 附注jdk的下载地址: https://www.wendangku.net/doc/11710738.html,/technetwork/java/javase/downloads/jdk-6u32-downlo ads-1594644.html 三,Amoeba的安装(amoeba只需安装到一台主机上即可,默认情况下,是安装到主(master)服务器上,如果有第三台服务器,也可以将其安装到第三台服务器上。这样,减少了

数据库读写分离

随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了。ebay就做得非常好。ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据。 读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。Quest SharePlex就是比较牛的同步数据工具,听说比oracle本身的流复制还好,mysql也有自己的同步数据技术。mysql只要是通过二进制日志来复制数据。通过日志在从数据库重复主数据库的操作达到复制数据目的。这个复制比较好的就是通过异步方法,把数据同步到从数据库。 主数据库同步到从数据库后,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。读的操作怎么样分配到从数据库上?应该根据服务器的压力把读的操作分配到服务器,而不是简单的随机分配。mysql提供了MySQL-Proxy实现读写分离操作。不过MySQL-Proxy 好像很久不更新了。oracle可以通过F5有效分配读从数据库的压力。

ebay的读写分离(网上找到就拿来用了) mysql的读写分离上面说的数据库同步复制,都是在从同一种数据库中,如果我要把oracle的数据同步到mysql中,其实要实现这种方案的理由很简单,mysql免费,oracle太贵。好像Quest SharePlex也实现不了改功能吧。好像现在市面还没有这个工具吧。那样应该怎么实现数据同步?其实我们可以考虑自己开发一套同步数据组件,通过消息,实现异步复制数据。其实这个实现起来要考虑很多

数据库读写分离解决方案--DG实施方案

数据库读写分离解决方案 ----oracle 11G ADG实施方案

1.项目背景介绍 1.1目的 通过DG实现主库与备库同步,主库作为业务应用库,备库作为查询库,应用根据不同需求配置对应数据库; 1.2测试环境 在2台RedHat5.4上使用ORACLE 的DataGuard组件实现容灾。设备配置(VMWare虚拟机环境)清单如下:

2.Oracle DataGuard 介绍 备用数据库(standby database)是ORACLE 推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。 ●STANDBY DATABASE的类型: 有两种类型的STANDBY:物理STANDBY和逻辑STANDBY 两种类型的工作原理可通过如下图来说明: physical standby提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是可以直接应用REDO实现同步的。 l ogical standby则不是这样,在logical standby中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表,但其数据库用户相关对象均需要有主键。 ?本次实施将选择物理STANDBY(physical standby)方式

●对主库的保护模式可以有以下三种模式: –Maximum protection (最高保护) –Maximum availability (最高可用性) –Maximum performance (最高性能) ?基于项目应用的特征及需求,本项目比较适合采用Maximum availability (最 高可用性)模式实施。

网站MySQL数据库优化方案-主从架构及读写分离

网站MySQL数据库优化方案 网络运维信息管理中心 (2020年8月)

数据库为网站提供数据的结构化存储,是网站系统的重要组成部分,但随着业务逻辑的复杂度的增加,数据库需要不断的优化,单一的数据库已无法满足现在要求。 1.1优化目标 针对网站的MySQL数据库部署架构进行优化,其优化的目的是为了防止数据库出现单点故障问题,提高数据库的处理能力,提高数据库的可靠性,为保证网站业务正常办理。 1.2优化工作思路 1、对现有数据库现状分析包括现有数据库配置合理性分析、现有数据库部署情况两部分工作内容; 2、梳理现有网站的功能模块,目的是通过梳理网站的各功能模块对数据读取时效性,分析其是否可以实现读写; 3、以数据库主从架构及数据库读写分离方式,对网站的MySQL 数据库提出数据库部署架构优化的方案,数据库主从架构的多数据库模式,解决数据库单点存在的问题,当主数据库出现宕机时,可以将从数据库代替主数据库恢复业务系统正常运行,而且避免数据的丢失,提高数据库高可靠性和高可用性;通过部分查询统计功能,实现数据库读写分离,以便对数据库负载进行分流,缓解主数据库的读取压力。

2.1当前数据库部署架构图 当前网站的数据库采用单台MySQL数据库提供数据库服务,当前部署架构图如下: 2.2现有数据库主要配置梳理

2.3数据库部署情况梳理 2.3.1数据库安装部署情况梳理 2.3.2现有应用连接数据库情况梳理 连接数据库的应用系统有会员管理、权限管理、订单模块、商品管理、促销管理、广告管理、报表统计、文章管理、评论管理、系统设置、数据库管理、短信管理、推荐管理、邮件群发管理等。2.3.3数据库服务启动、停止方式梳理 1、启动命令 (1)普通启动:/data/soa/mysql/bin/mysqld (2)centos6以前版本:service start mysqld (3)centos7+:systemctl mysqld start

数据库使用情况分析

数据库使用情况分析 一、警报日志: 1)计算一个月插入数据 目前操作为15S会执行一次数据库操作;假设有2000台;那么;一个月的数据为: 单枪柜: 4*60*24*30=240 0000 如果为2000台: 240*2000=40000W 这是极限值; 2)计算数据库插入频率 按时间权限处理算下数据库插入操作频率: 15S/2000 =7ms执行一次插入操作 3)数据查询 数据库的数据要与其他的表用ID做关联,那么这个操作会更糟糕;因为警报日志表中在7ms就会执行一个插入动作,所以关联的查询如果在7ms中检索不出来,检索的数据就会有脏数据;(检索和插入动作产生冲突,数据库在处理检索和插入的同时还会处理他们的冲突事情) 由上可以看出数据库的性能要远远高于7ms才可以 以上为单张表警报日志处理极限值分析; 以上解决方法: 1)插入执行时间加长到1个小时,相当于执行极限频率提高到7ms*60*4=5s 2)分库,把此单张表移到一个单独数据库中; 3)换中型数据库MSSQL 或大型数据库ORACLE; 二、取枪还枪日志极限值分析 1)枪弹柜取枪与还枪动插入操作 枪弹柜取枪与还枪动作限定每天执行一支枪一个动作;每个枪弹柜只有十支枪,子弹不用取还计算; 一个枪弹柜一天执行的动作数: 1*10=10次;

按2000枪弹柜计算: 一个月执行的次数为: 10*2000*30=30 0000数据; 取还枪表一个月的数据要有30W数据存在;一年大约为400W数据分为两张表,单张表一年数据也近200W; 2)取还枪执行频率 最坏计算: 所有取枪人员在上班同一时间(一小时)取枪计算执行频率为 1*60*60/20000=0.06S 按上述频率计算,数据库的性能至少是执行每个动作不超过0.06s 就不会产生冲突;(数据不会丢或不会出错),但一般数据库中表关联查询(多表查询)都差不止要这个时间;所以产生冲突的可能必会很大;数据库一定要可以处理这种冲突; 三、整个数据库计算 如果计算最坏情况下数据库的使用频率 应该是: 一个60ms执行一次一个7ms执行一次;最坏计算是420ms产生一次冲突(取还枪与警报日志);也就是一秒内会有至少产生两次冲突的可能; 而单独警报日志自身不同动作(插入、删除)是0.007S产生一次冲突,数据库会可能会产生一次冲突; 四、解决方案 1)优化数据库和程序代码; 缺点:对程序员和数据库优化人员的技术要求高; 优点:数据库可以继续使用目前数据库 2)数据分库、数据库读写分离; 缺点:程序需要修改 优点:动作很容易实现 3)换大型数据库(MSSQL 或ORACLE); 缺点:可能需要收费(如果我们项目可以使用破解版本,就可以不用担心), 优点:直接把结构COPY即可;对程序员和数据库优化人员要求低; 4)如果换库建议使用破解版本ORACLE或MSSQL;

mysql读写分离

Linux下Mysql源码安装笔记 安装步骤: 1.解压mysql-5.1.55.tar.gz 命令: tar -zxvf mysql-5.1.55.tar.gz 2.配置Mysql 命令:./configure --prefix=/usr/local/mysql 说明:安装到/usr/local/mysql下,当然用别的也行,还有其它参数可以查看相关文档. 3.编译,安装 命令: make make install 这两个命令发的时间较长. 4.创建用户和组. groupadd mysql useradd -g mysql mysql 5.进入mysql目录.创建var目录.并把./share/Mysql/https://www.wendangku.net/doc/11710738.html,f 拷到Mysql目录下并改名为https://www.wendangku.net/doc/11710738.html,f. >mkdir var >mv share/mysql/https://www.wendangku.net/doc/11710738.html,f https://www.wendangku.net/doc/11710738.html,f 6.配置https://www.wendangku.net/doc/11710738.html,f 配置主要把安装的目录的那几项打开就行. 7.安装数据库 命令:./bin/Mysql_install_db 说明:必须用参数--defaults-file指定https://www.wendangku.net/doc/11710738.html,f,否则系统用默认的/etc/https://www.wendangku.net/doc/11710738.html,f.

8.安装完后,可以看到mysql/var目录下有数据文件,然后用下面命令设置权限: shell> chown -R root . shell> chown -R mysql var shell> chgrp -R mysql . 9.启动数据库. ./bin/Mysqld_safe 10.进入数据库. ./bin/mysql -u root – 默认时没有密码,当然如果你删除/etc/https://www.wendangku.net/doc/11710738.html,f,可以不要后面的--defaults-file=/test/Mysql/https://www.wendangku.net/doc/11710738.html,f ./bin/Mysql -u root --socket=/tmp/Mysql3306 也就行了,原因大家应该知道吧!^_^! 11.设为服务并自启动. 对于设置为服务只要把mysql/share/mysql/mysql.server放到/etc/init.d/下改名为mysql 命令: mv share/mysql/mysql.server /etc/init.d/mysql chmod 775 /etc/init.d/mysql chkconfig --add mysql 总结,这只是安装了一个3306端口的mysql,如果要在装一个msyql,步骤一样,只要改动https://www.wendangku.net/doc/11710738.html,f文件的内容. 设置用户权限: grant all privileges on *.* to 'root'@'%' identified by 'ZJLT&https://www.wendangku.net/doc/11710738.html,' with grant opt ion; 备: server-id = 2 master-host=192.168.1.14 replicate-do-db=appmarket master-user=root master-password=ZJLT&https://www.wendangku.net/doc/11710738.html,

数据库规范

数据库相关规范 1.使用utf8mb4字符集 2.所有表、字段必须写清中文注释 3.金额字段禁止使用小数存储(单位:分) 4.禁止使用字段属性隐式转换(如:“WHERE ms_no = 1234”ms_no为字符串类型) 5.尽量不使用负向查询(NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等) 6.禁止使用外键,如有完整性约束,需要应用程序控制 7.禁止使用程序配置文件内的账号访问线上数据库 8.禁止非DBA对线上数据库进行写操作 9.开发、测试、线上环境分离 10.所以提交的SQL语句必须经过测试 11.禁止存储大文件或大照片 12.库名、表名、字段名:小写,下划线分割,不超过32个字符,必须见名知意,禁止拼 音英文混用 13.表必须有主键 14.必须把字段定义为NOT NULL并设置默认值 15.必须使用varchar(20)来存储手机号 16.单表索引控制在5个以内,单索引字段数不许超过5个 a)索引的使用。? b)(1) 尽量避免对索引列进行计算。如计算较多,请提请管理员建立函数索引。? c)(2) 尽量注意比较值与索引列数据类型的一致性。? d)(3) 对于复合索引,SQL语句必须使用主索引列? e)(4) 索引中,尽量避免使用NULL。? f)(5) 对于索引的比较,尽量避免使用NOT=(!=)? g)(6) 查询列和排序列与索引列次序保持一致 (7) 禁止在更新频繁、区分度不高(如:性别)的字段上建立索引 (8) 建立组合索引,必须把区分度高的字段放在前面 17.禁止使用SELECT * ,只获取必要的字段 18.禁止使用INSERT INTO t_xxx VALUES(xxx),必须指定插入的列名 19.禁止在WHERE条件的属性上使用函数或表达式 20.禁止%开头的模糊查询 21.禁止使用OR条件 22.应用程序必须捕获SQL异常,并作出相应处理 23.逻辑删除代替物理删除 24.选择最有效的表名、查询条件顺序(从右到左) 25.减少访问数据库的次数 26.SQL中的关键字均使用大写字母,数据表最好起别名 27.查询条件中“>=”代替“>” 28.等号两边使用空格,逗号后使用空格 29.多表操作必须使用别名 30.整条语句必须写明注释,关键逻辑单独书写注释,说明算法、功能 a)注释风格:注释单独成行、放在语句前面。? b)(1) 应对不易理解的分支条件表达式加注释;? c)(2) 对重要的计算应说明其功能;?

数据库读写分离方案及对比

数据库读写分离方案及对比版本日期修改历史作者

目录 1概述 (3) 2背景 (3) 3数据库读写分离方案 (3) 3.1Oracle数据库几种常用的复制技术及特点 (3) 3.2异构数据库(Oracle+Mysql)+ GoldenGate (3) 3.2.1方案描述 (3) 3.2.2实现原理 (4) 3.3异构数据库(Oracle+Mysql)+ 其他复制技术 (6) 3.4同构数据库(Oracle)+ GoldenGate (6) 3.4.1方案描述 (6) 3.4.2实现原理 (7) 3.5同构数据库(Oracle)+ DataGuard (7) 3.6同构数据库(SqlServer2008 企业版) (7) 3.6.1实现原理 (8) 3.7同构数据库(Mysql5社区版) (8) 4方案对比 (9)

1概述 本文主要是描述SVC(统一客户视图)项目的数据库读写分离的几种解决方案及优缺点对比。2背景 为了能进一步提升SVC业务系统的服务质量水平、运行效率、系统健壮性稳定性及运行安全,信息中心提出了对SVC的架构进行调整升级,以满足目前及未来的建设需求。 为了缓解大并发的情况下对数据库造成的压力,方案中引入了缓存及数据库的读写分离的技术解决问题。这里针对数据库的读写分离方案有几种实现方式,这里主要是描述这几种方案,以及这几种方案的对比,最后根据具体的情况选择最适合的方案。 由于是比较重要的业务系统,数据量及访问量都比较大,数据的存储主要考虑Oracle、DB2、SQLServer等知名商业数据库厂商。考虑到实现的技术复杂度及运维难度这里主要推荐Oracle作为存储数据库。 3数据库读写分离方案 这里初步提议的数据库有两种,Oracle 11g与Mysql 5。 3.1O racle数据库几种常用的复制技术及特点 3.2异构数据库(Oracle+Mysql)+ GoldenGate 3.2.1方案描述 该方案使用的是异构数据库,其中主数据为Oracle双机热备,从数据库使用的是多台Mysql。主数据库可进行读写操作,主要是进行写操作,从数据库只能读操作。下面是该方案的逻辑架构图:

数据共享集群和读写分离集群的服务名配置

数据共享集群和读写分离集群的服务名配置 DMDSC Dameng Data Shared Clusters,达梦数据共享集群。 DMRWC Dameng Read/Write Clusters,达梦读写分离集群。 1. DMDSC在生产环境中用的越来越多,就有应用配置连接字符串的问题,首先需配置dm_svc.conf(类似于Oracle的tnsnames.ora),如下: time_zone=(480) language=(en) dmrac=(192.168.0.1:5236,192.168.0.2:5236) switch_time=(10000) switch_interval=(1000) loadBalance=(true) loadBalanceFreq=(10000) loadBalancePercent=(10) dmrac: 服务名,配置DSC节点的IP和端口。 loadBalance : 是否负载均衡 loadBalanceFreq: 负载均衡的频率 然后需要配置的URL字符串: url="jdbc:dm://dmrac:5236?comOra=true&loadBalance=true&loadBalanceF req=10000" comOra: 是否兼容ORACLE模式 & :转义字符,转义为& 2. 读写分离集群(DMRWC)服务名配置: TIME_ZONE=(480) LANGUAGE=(en) DM_RWW=(192.168.0.151:5236,192.168.0.152:5236,192.168.0.153:5236) RW_SEPARATE=(1) RW_PERCENT=(30) LOGIN_PRIMARY=(1) SWITCH_TIME=6000

读写分离----构建报表和查询系统

数据库读写分离 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了。ebay就做得非常好。ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据。 读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库 服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。Quest SharePlex就是比较牛的同步数据工具,听说比oracle本身的流复制还好,mysql也有自己的同步数据技术。mysql只要是通过二进制日志来复制数据。通过日志在从数据库重复主数据库的操作达到复制数据目的。这个复制比较好的就是通过异步方法,把数据同步到从数据库。 主数据库同步到从数据库后,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。读的操作怎么样分配到从数据库上?应该根据服务器的压力把读的操作分配到服务器,而不是简单的随机分配。mysql 提供了MySQL-Proxy实现读写分离操作。不过MySQL-Proxy好像很久不更新了。oracle可以通过F5有效分配读从数据库的压力。

ebay的读写分离(网上找到就拿来用了) mysql的读写分离 上面说的数据库同步复制,都是在从同一种数据库中,如果我要把oracle的数据同步到mysql中,其实要实现这种方案的理由很简单,mysql免费,oracle太贵。好像Quest SharePlex也实现不了改功能吧。好像现在市面还没有这个工具吧。那样应该怎么实现数据同步?

Spring2连接多数据库,实现读写分离

Spring2连接多数据库,实现读写分离 Spring2.0.1以后的版本已经支持配置多数据源,并且可以在运行的时候动态加载不同的数据源。通过继承AbstractRoutingDataSource就可以实现多数据源的动态转换。目前做的项目就是需要访问2个数据源,每个数据源的表结构都是相同的,所以要求数据源的变动对于编码人员来说是透明,也就是说同样SQL语句在不同的环境下操作的数据库是不一样的。具体的流程如下: 一、建立一个获得和设置上下文的类 package com.lvye.base.dao.impl.jdbc; /**连接哪个数据源的环境变量 * @author wenc */ public class JdbcContextHolder { private static final ThreadLocal contextHolder = new ThreadLocal(); public static void setJdbcType(String jdbcType) { contextHolder.set(jdbcType); } public static void setSlave(){ setJdbcType("slave"); } public static void setMaster(){ clearJdbcType(); } public static String getJdbcType() { return (String) contextHolder.get(); } public static void clearJdbcType() { contextHolder.remove(); } } 二、建立动态数据源类,这个类必须继承AbstractRoutingDataSource package com.lvye.base.dao.impl.jdbc; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource{ /* (non-Javadoc) * @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#determineCurrentLook upKey() * @author wenc */ @Override protected Object determineCurrentLookupKey() { return JdbcContextHolder.getJdbcType(); } } 这个类实现了determineCurrentLookupKey方法,该方法返回一个Object,一般是返回字符串。该方法中直接使用了JdbcContextHolder.getJdbcType();方法获得上下文环境并直接返回。 三、编写spring的配置文件配置数据源

数据库大型应用解决方案

数据库大型应用解决方 案

随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。 [@more@] 一、负载均衡技术 负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器。 1、实现原理 实现数据库的负载均衡技术,首先要有一个可以控制连接数据库的控制端。在这里,它截断了数据库和程序的直接连接,由所有的程序来访问这个中间层,然后再由中间层来访问数据库。这样,我们就可以具体控制访问某个数据库了,然后还可以根据数据库的当前负载采取有效的均衡策略,来调整每次连接到哪个数据库。 2、实现多据库数据同步 对于负载均衡,最重要的就是所有服务器的数据都是实时同步的。这是一个集群所必需的,因为,如果数不据实时、不同步,那么用户从一台服务器读出的数据,就有别于从另一台服务器读出的数据,这是不能允许的。所以必须实现数据库的数据同步。这样,在查询的时候就可以有多个资源,实现均衡。比较常用的方法是 Moebius for SQL Server集群,Moebius for SQL Server集群采用将核心程序驻留在每个机器的数据库中的办法,这个核心程序称为Moebius for SQL Server 中间件,主要作用是监测数据库内数据的变化并将变化的数据同步到其他数据库中。数据同步完成后客户端才会得到响应,同步过程是并发完成的,所以同步到多个数据库和同步到一个数据库的时间基本相等;另外同步的过程是在事务的环境下完成的,保证了多份数据在任何时刻数据的一致性。正因为Moebius 中间件宿主在数据库中的创新,让中间件不但能知道数据的变化,而且知道引起数据变化的SQL语句,根据SQL语句的类型智能的采取不同的数据同步的策略以保证数据同步成本的最小化。

数据库高并发升级方案1讲解

XXXXXXXXXXXX平台数据库升级方案

XXXXXXXXXXXXXXX有限公司 日28月11年2016. 修订记录版说作批批准日 2011对升级方案进行编V1.0XXXX 1 目录 1. 概述 (4) 1.1. 背景 (4) 1.2. 目标与目的 (4) 1.3. 可行性分析 (4) 1.4. 参考依据 (5) 2. 数据库高并发方案 (5) 2.1. 数据库均衡负载(RAC) (5) 2.2. 数据库主从部署 (8) 2.3. 数据库垂直分割 (9) 2.4. 数据库水平分割 (10) 3. 二代办公平台数据库优化设计 ........................... 11 3.1. 数据库集群 (11) 3.2. 重点业务表分区 (11) 3.3. 任务表历史数据分割 (12) 3.4. 数据库表结构优化 (12)

3.5. 数据访问优化 (12) 4. 实施方案 (13) 5. 工作量及预算评估 (14) 5.1. 工作量及预算评估 (14) 5.2. 其他费用 (15) 1.概述 1.1.背景 随着XXXXXX平台及其他子系统业务量增多,且用户已面向各地州市,用户数量增大,现有的二代办公平台及其他子系统在单一环境下的架构体系和数据库架构体系也无法高效的满足这样的场景。 当前XXXXXX平台及其子系统通过搭建多台WEB服务器和双机热备份的方式进行部署运行。虽已提高了整体效率,但对于部分的业务处理还是未解决。部分业务量并发处理多,业务关联多等因素,导致对数据库并发处理的业务量大,读写量大等也无法用双机热备份进行解决。 因此,在此背景下提高数据库访问效率,增大访问吞吐量等将成为二代办公平台及其子系统运行顺畅的关键因素。 1.2.目标与目的 目标:依托现有系统服务和设备环境,建立可扩容、高并发、高吞吐量的数据库架构体系。 目的:为缓解当前XXXXXX平台机器及其他子系统对数据库访问过大,造成的访问效率低下的问题,提升数据库访问效率和并发效率。对部分业务繁杂的表和访问进行优化设计,缓解因此造成的使用效率低下问题。 1.3.可行性分析 数据库性能分析:根据当前的数据库性能分析,当前硬件设备的提高也无法满足数据库性能的提升,因此应考虑数据库访问控制和数据访问方面进行优化。现有的数据库虽也实现双机热备份,但访问的效率未较大改善,因此应考虑各健全的数据库高并发访问方案。 数据库优化分析:当前的数据库采用的ORACLE数据库,同时,现有的均衡负载、读写分离、数据分割技术较为成熟,在对系统进行适当调整和优化的情况下,能保证系统的正常运行。. 参考依据1.4. 核心技术详解》《Oracle RAC数据库高并发方案2. (RAC) 2.1.数据库均衡负载Oracle,“实时应用集群”是,RAC全称real application clusters,译为数据库支持Oracle新版数据库中采用的一项新技术,是高可用

DM7-JDBC支持数据库服务读写分离

JDBC支持数据库服务读写分离 达梦数据库有限公司

目录 JDBC支持数据库服务读写分离 ................................................................................................... I 1 介绍 (1) 2 需求 (1) 2.1整体需求描述 (1) 2.2功能要求 (1) 2.3性能要求 (1) 3 系统总体结构设计 (1) 3.1异常处理流程................................................................................. 错误!未定义书签。 3.2D MDB C ONNECTION............................................................................. 错误!未定义书签。 3.3D MDB C ONNECTION_SINGLE............................................................... 错误!未定义书签。 3.4语句句柄......................................................................................... 错误!未定义书签。 3.5CMD_PREPARE/CMD_EXECUTE.................................................. 错误!未定义书签。 3.6备机连接信息................................................................................. 错误!未定义书签。 4 接口定义 (6) 4.1用户接口 (6) 5 应用实例 (6) 5.1转换验证 (7) 5.2标准测试 (7)

SqlServer实现主从复制读写分离操作说明

SQL Server 实现主从复制与读写分离操作说明 作者: 完成日期:2020/05/21 签收人: 签收日期: 编撰情况记录:

目录: 1数据库主从复制及读写分离概述 (3) 2实施步骤操作说明 (3) 2.1数据复制组件安装配置 (3) 2.2准备工作 (6) 2.3配置出版服务器(分发服务器) (6) 2.4测试数据库信息 (15) 2.5配置订阅服务器 (15) 2.6数据同步测试 (20)

SQL Server实现主从复制读写分离操作说明 整理编写:杨胜灵 实验日期:2020/05/17(本地)、2020/05/20(公网) 文档日期:2020/05/18~2020/05/21 1数据库主从复制及读写分离概述 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主从复制也可以理解为数据同步。 主数据库一般是实时的业务数据库。处理事务性增加、修改、删除操作,还可以包括实时性强的查询操作。 从数据库的作用和使用场景如下: 1)作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作; 2)可在从数据库作备份、数据查询等工作,这样不影响主数据库的性能; 3)用于数据分析,辅助丛书数据库与主数据库一模一样,数据分析不影响主数据库的 使用。 实现读写分离的好处: 1)提高了系统性能,硬件资源充足的情况下,将会成倍提高数据库负载能力。 2)是缓解数据负载最简单可行的方案;无需重构数据库表结构、修改程序代码,节省 时间成本、人力成本。 3)读写分离通过主从备份数据,保证了系统的冗余,避免了卡顿情况下引起的数据丢 失问题。 4)一定程度上解决复杂查询统计所导致的系统性能瓶颈。 5)极大的增强了数据安全。 2实施步骤及操作说明 2.1数据复制组件安装配置 配置数据库同步前,请确保每台数据库系统环境一致,未安装复制组件时,请安装配置SQL Server 复制组件。如果已经配置安装复制组件,可略过此节。 1,从安装介质启动SQL Server 安装中心:

数据库运维流程(工作流标准)20150721

数据库运维流程 工作流标准 文件修订记录表 日期作者修订类型修订内容版本2015.7.20 新增制定本方案 1.0

目录 数据库运维流程 (1) 工作流标准 (1) 目录 (2) 服务器配置标准 (2) 安装标准 (3) 监控标准 (3) 业务保障标准 (4) 慢查询标准 (4) 配合开发评估SQL标准 (4) 故障处理流程和故障报告标准 (5) 备份数据库标准 (6) 数据批量处理流程标准 (7) 灾备、高可用标准 (7) 数据库访问权限管理标准 (8) 服务器配置标准 根据DBA提出的需求来采购、安装、配置数据库服务器,

硬件标准如下: 2U机架式; CPU 型号INTEL Xeon系列2.4GHz或以上;数量2颗; 内存32GB 或64GB; 硬盘600GB*6块10KB SAS硬盘,RAID 10; 如果IO存在瓶颈,可以配置PCIe SSD固态硬盘; 软件标准如下: CentOS release 6.6 (Final) 2.6.32 x86_64 GNU/Linux 安装标准 用户名称 Oracle数据库用户为:oracle Mysql数据库用户为:mysql 安装位置: Oracle软件:/oracle/product/11.2.0/db_1 Oracle数据:/oracle Mysql软件:/data/womai/mysql Mysql数据:/data 内存使用(32GB) Oracle SGA使用20GB Oracle PGA使用3GB Mysql buffer_pool 使用20GB Mysql key_buffer 使用512MB 监控标准 1.系统自动收集数据库中告警日志中的错误信息,以邮件形式发送至邮箱,数据库管理员需每日查看该邮件,并及时处理。 2.每日查看Nagios数据库告警信息。 3.当手机信息、邮件收到Nagios告警信息时,需第一时间告知领导和相关项目人员,并及时进行处理。 具体监控项目如下: Check current users logged in; Check load average; Check disk;

Mysql主从复制与读写分离(已成功)

Linux(Ubuntu)环境MYSQL->Master/Slave主从同步设置以及注意事项 主库(192.168.120) Ubuntu 10.10 Server Mysql version: 5.1.49-1ubuntu8.1-log 备库(192.168.121) Ubuntu 10.10 Server Mysql version: 5.1.49-1ubuntu8.1-log 由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。=======================主库(192.168.120)====================================== 1、修改https://www.wendangku.net/doc/11710738.html,f r oger@ubuntu:~#vim /etc/https://www.wendangku.net/doc/11710738.html,f 禁掉bind-address此项 [mysqld] server-id = 1 log-bin=mysql-bin binlog_format=mixed (保持主从库的日志格式一致,如果不一致可能会不成功) 注: a、下面两个选项可以制定生成binlog和忽略的库,如果要同步所有数据库则下面两行不要不用写 b、binlog-ignore-db = mysql 不需要同步的数据库 c、binlog-do-db = rogerdb 需要同步的库 d、binlog-ignore-db与binlog-do-db正好相反,如果你有100个库,只想同步其中几个,那么你应该使用binlog-do-db,如果不想同步其中的几个,就使用binlog-ignore-db e、在实际测试中发现,如果通过上面两个命令指定了库,则master的Position 一直不会变化,google了一下有人说执行sql前要先use rogerdb才行-_-! 2、重启mysql服务 roger@ubuntu:~# /usr/local/mysql/share/mysql/mysql.server restart 3、建立同步用的数据库账户 mysql>GRANT REPLICATION SLAVE ON *.* TO slave@192.168.1.121 IDENTIFIED BY '1q2w3e'; 如果想要在Slave上有权限执行“LOAD TABLE FROM MASTER”或“LOAD DATA FROM MASTER”语句的话,必须授予全局的FILE 和SELECT 权限: mysql>GRANT RELOAD,SUPER,FILE,SELECT,REPLICATION SLAVE ON *.* TO backup@192.168.1.121 IDENTIFIED BY '1q2w3e'; 4、锁住主库表,停止数据更新 mysql> flush tables with read lock; 不要退出这个终端,否则这个锁就不生效了; 5、显示主库信息并记录 mysql> show master status; 记录前两框的数据 +—————————–+————-+———————–+—————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————–+————-+———————–+—————————+ | mysql-bin.000016 | 1676483 | | | +—————————–+————-+———————–+—————————+ 6、备份需要同步库文件并复制到从库服务器上,如果要同步全部库,则打包/usr/local/msyql/var目录,如果只同步一个数据rogerdb,则只复制rogerdb roger@ubuntu:~#cd /use/local/mysql/var roger@ubuntu:~#tar -zcvf mysql-master-rogerdb.tar.gz rogerdb //将rogerdb数据库打包

MySQL读写分离

常用命令: service mysqld start service iptables stop mysql–u root 主从复制 概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。

假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。 MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。 在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。 日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】 日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。 可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。 【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B 只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】 解决问题 数据如何不被丢失 备份 读写分离 数据库负载均衡 高可用 服务器准备 192.168.110.177主服务器master 192.168.110.178从服务器slave 修改主(master)服务器 vi/etc/https://www.wendangku.net/doc/11710738.html,f新增以下内容 server_id=177###服务器id log-bin=mysql-bin###开启日志文件

相关文档
相关文档 最新文档