当前位置:文档之家› MYSQL主从复制高可用实施手册

MYSQL主从复制高可用实施手册

MYSQL主从复制高可用实施手册
MYSQL主从复制高可用实施手册

MYSQL主从复制高可用实施手册

声明:该方案不能进行主从自由切换,如果要在主节点当机在恢复使用必须时候手动来操作,首先要进行同步数据,然后在做同步复制,最后在切换!这一切操作必须人为干预!

应用需求:

双机热备提供备份,冗余功能

安装环境:

NODE1 主机名master IP地址10.10.10.101

NODE2 主机名slave IP地址10.10.10.102

VIA IP(漂移IP) 10.10.10.100

NODE1为主节点,NODE2为从节点,同步的数据库名fire9

在安装之前请确认下面的安装包不存在

rpm -e mysql-devel-4.1.20-1.RHEL4.1

rpm -e mysql-bench-4.1.20-1.RHEL4.1

rpm -e php-mysql-4.3.9-3.15

rpm -e libdbi-dbd-mysql-0.6.5-10.RHEL4.1

rpm -e mod_auth_mysql-2.6.1-2.2

rpm -e mysql-server-4.1.20-1.RHEL4.1

rpm -e MySQL-python-1.0.0-1.RHEL4.1.i386

rpm -e MyODBC-2.50.39-21.RHEL4.1.i386

rpm -e qt-MySQL-3.3.3-9.3.i386

rpm -e mysqlclient10-devel-3.23.58-4.RHEL4.1.i386

rpm -e mysqlclient10-3.23.58-4.RHEL4.1

rpm -e cyrus-sasl-sql-2.1.19-5.EL4.i386

rpm -e perl-DBD-MySQL-2.9004-3.1.i386

rpm -e mysql-4.1.20-1.RHEL4.1

安装准备:我已经把相关的软件和配置文件都放在工具包里面了

redhat as 4 update4 32位

mysql-5.0.45-linux-i686-icc-glibc23.tar.gz

libnet-1.1.2.1-1.rh.el.um.1.i386.rpm

heartbeat-pils-2.0.4-1.el4.i386.rpm

heartbeat-stonith-2.0.4-1.el4.i386.rpm

heartbeat-2.0.4-1.el4.i386

perl-5.8.8.tar.gz

DBI-1.59.tar.gz

DBD-mysql-4.005.tar.gz

Time-HiRes-01.20.tar.gz

Period-1.20.tar.gz

Convert-BER-1.31.tar.gz

Mon-0.11.tar.gz

mon-0.99.3-47.tar.gz

一、安装MYSQL 主从都要做

# tar zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz -C /usr/local/

# cd /usr/local/

# mv mysql-5.0.45-linux-i686-icc-glibc23 mysql

# cd mysql

# groupadd mysql

# useradd -g mysql mysql

#passwd mysql

# ./scripts/mysql_install_db --user=mysql

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

# chmod +x /etc/rc.d/init.d/mysqld

# chkconfig --add mysqld

# /etc/rc.d/init.d/mysqld start

把提供的https://www.doczj.com/doc/6f6441210.html,F文件拷贝主机的/etc/目录下,根据下面的提示修改所需要的参数

把提供的https://www.doczj.com/doc/6f6441210.html,F文件拷贝从机的/etc/目录下,根据下面的提示修改所需要的参数

主机和从机一样进行操作:vi /etc/https://www.doczj.com/doc/6f6441210.html,f

从机需要注意的是关闭server-id =1 打开server-id = 2;关闭log-bin=mysql-bin和binlog-do-db=fire9这两个参数;主机打开server-id =1 关闭server-id =2;打开

log-bin=mysql-bin 和打开replicate-do-db=fire9 。(fire9指的是需要主从备份的数据库)

mysql主从复制的配置

在主机上操作

# mysql

Mysql> create database fire9; #从机也需要建立一样的数据库

Mysql>set password for root@localhost = password (‘123456’); #给ROOT用户建立密码Mysql>flush privileges;

Mysql>GRANT replication slave ON fire9.* TO slave@10.10.10.102 IDENTIFIED BY 'password'; # mysqldump -uroot -p fire9 > fire9.sql

# scp fire9.sql root@10.10.10.102:/tmp

在从机上操作

导入主机的数据库

Mysql> create database fire9; #从机需要建立与主机一样的数据库

# mysql -uroot -p hipiao < /tmp/fire9.sql

登入数据库操作

Mysql>set password for root@localhost = password (‘123456’); #给ROOT用户建立密码Mysql>flush privileges;

Mysql> CHANGE MASTER TO

MASTER_HOST = '10.10.10.101',

MASTER_PORT = 3306,

MSTER_USER = 'slave',---------------- 此帐号和密码是在主服务器上建立一个复制帐号

MASTER_PASSWORD = 'password',

MASTER_LOG_FILE = 'mysql-bin.000001',------- 这个在主机上通过

Mysql>show master status;命令获得MASTER_LOG_POS = 98;---------------- 这个在主机上通过

Mysql>show master status;命令获得

Mysql> Slave start;

Mysql>show slave status\G;

检查一下Master_Log_File 和Master_Log_Pos是不是和主机的一样同时下面两个必须都为YES才对。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

二、HEARTBEAT软件包安装---------主从都需要作

# rpm -ivh libnet-1.1.2.1-1.rh.el.um.1.i386.rpm

# rpm -ivh heartbeat-pils-2.0.4-1.el4.i386.rpm

#rpm -ivh heartbeat-stonith-2.0.4-1.el4.i386.rpm

# rpm -ivh heartbeat-2.0.4-1.el4.i386.rpm

配置PERL环境

# rpm -e perl-DBI-1.40-8

# rm -rf /usr/lib/perl

# rm -rf /usr/lib/perl5

# rm -rf /usr/bin/perl*

# rm -rf /usr/share/man/man1/perl*

# rm -rf /usr/local/bin/perl*

# tar zxvf perl-5.8.8.tar.gz -C /usr/lib/

#cd /usr/lib

# mv perl-5.8.8 perl

# cd perl

# ./Configure -de

# make

# make test

# make install

# tar zxvf DBI-1.59.tar.gz

#cd DBI-1.59

# perl Makefile.PL

# make

# make test

# make install

# tar zxvf DBD-mysql-4.005.tar.gz -C /usr/lib/

# cd /usr/lib/

# mv DBD-mysql-4.005 dbd

# cd dbd

# perl Makefile.PL

# make

# make install

配置HEARTBEAT相关文件

cp /usr/share/doc/heartbeat-2.0.4/authkeys /etc/ha.d

# cd /etc/ha.d/

Authkeys配置

vi authkeys

#

# Authentication file. Must be mode 600

#

#

# Must have exactly one auth directive at the front.

# auth send authentication using this method-id

#

# Then, list the method and key that go with that method-id

#

# Available methods: crc sha1, md5. Crc doesn't need/want a key.

#

# You normally only have one authentication method-id listed in this file #

# Put more than one to make a smooth transition when changing auth # methods and/or keys.

#

#

# sha1 is believed to be the "best", md5 next best.

#

# crc adds no security, except from packet corruption.

# Use only on physically secure networks.

#

auth 1

#1 crc

1 sha1 HI!

#3 md5 Hello!

# chmod 600 authkeys

cp /usr/share/doc/heartbeat-2.0.4/haresources /etc/ha.d

vi /etc/ha.d/ haresources 添加如下一行

master 10.10.10.100

----------------- master是指主服务器的主机名

----------------- 10.10.10.100是指对外提供的虚拟ip

----------------- mysqld是指mysqld服务

cp /usr/share/doc/heartbeat-2.0.4/ha.cf /etc/ha.d

ha.cf配置

vi /etc/ha.d/ha.cf

#

# There are lots of options in this file. All you have to have is a set # of nodes listed {"node ...} one of {serial, bcast, mcast, or ucast},

# and a value for "auto_failback".

#

# ATTENTION: As the configuration file is read line by line,

# THE ORDER OF DIRECTIVE MATTERS!

#

# In particular, make sure that the udpport, serial baud rate

# etc. are set before the heartbeat media are defined!

# debug and log file directives go into effect when they

# are encountered.

#

# All will be fine if you keep them ordered as in this example.

#

#

# Note on logging:

# If any of debugfile, logfile and logfacility are defined then they # will be used. If debugfile and/or logfile are not defined and

# logfacility is defined then the respective logging and debug

# messages will be loged to syslog. If logfacility is not defined

# then debugfile and logfile will be used to log messges. If

# logfacility is not defined and debugfile and/or logfile are not # defined then defaults will be used for debugfile and logfile as # required and messages will be sent there.

#

# File to write debug messages to

debugfile /var/log/ha-debug

#

#

# File to write other messages to

#

logfile /var/log/ha-log

#

#

# Facility to use for syslog()/logger

#

#logfacility local0

#

#

# A note on specifying "how long" times below...

#

# The default time unit is seconds

# 10 means ten seconds

#

# You can also specify them in milliseconds

# 1500ms means 1.5 seconds

#

#

# keepalive: how long between heartbeats?

#

keepalive 2

#

# deadtime: how long-to-declare-host-dead?

#

# If you set this too low you will get the problematic

# split-brain (or cluster partition) problem.

# See the FAQ for how to use warntime to tune deadtime.

#

deadtime 30

#

# warntime: how long before issuing "late heartbeat" warning?

# See the FAQ for how to use warntime to tune deadtime.

#

warntime 10

#

#

# Very first dead time (initdead)

#

# On some machines/OSes, etc. the network takes a while to come up # and start working right after you've been rebooted. As a result

# we have a separate dead time for when things first come up.

# It should be at least twice the normal dead time.

#

initdead 120

#

#

# What UDP port to use for bcast/ucast communication?

#

udpport 694

#

# Baud rate for serial ports...

#

#baud 19200

#

# serial serialportname ...

#serial /dev/ttyS0 # Linux

#serial /dev/cuaa0 # FreeBSD

#serial /dev/cua/a # Solaris

#

#

# What interfaces to broadcast heartbeats over?

#

#bcast eth0 # Linux

bcast eth1 # Linux

#bcast le0 # Solaris

#bcast le1 le2 # Solaris

#

# Set up a multicast heartbeat medium

# mcast [dev] [mcast group] [port] [ttl] [loop]

#

# [dev] device to send/rcv heartbeats on

# [mcast group] multicast group to join (class D multicast address

# 224.0.0.0 - 239.255.255.255)

# [port] udp port to sendto/rcvfrom (set this value to the

# same value as "udpport" above)

# [ttl] the ttl value for outbound heartbeats. this effects

# how far the multicast packet will propagate. (0-255)

# Must be greater than zero.

# [loop] toggles loopback for outbound multicast heartbeats. # if enabled, an outbound packet will be looped back and # received by the interface it was sent on. (0 or 1)

# Set this value to zero.

#

#

#mcast eth0 225.0.0.1 694 1 0

#

# Set up a unicast / udp heartbeat medium

# ucast [dev] [peer-ip-addr]

#

# [dev] device to send/rcv heartbeats on

# [peer-ip-addr] IP address of peer to send packets to

#

#ucast eth0 192.168.1.2

#

#

# About boolean values...

#

# Any of the following case-insensitive values will work for true:

# true, on, yes, y, 1

# Any of the following case-insensitive values will work for false: # false, off, no, n, 0

#

#

#

# auto_failback: determines whether a resource will

# automatically fail back to its "primary" node, or remain

# on whatever node is serving it until that node fails, or

# an administrator intervenes.

#

# The possible values for auto_failback are:

# on - enable automatic failbacks

# off - disable automatic failbacks

# legacy - enable automatic failbacks in systems

# where all nodes do not yet support

# the auto_failback option.

#

# auto_failback "on" and "off" are backwards compatible with the old # "nice_failback on" setting.

#

# See the FAQ for information on how to convert

# from "legacy" to "on" without a flash cut.

# (i.e., using a "rolling upgrade" process)

#

# The default value for auto_failback is "legacy", which

# will issue a warning at startup. So, make sure you put

# an auto_failback directive in your ha.cf file.

# (note: auto_failback can be any boolean or "legacy")

#

auto_failback on

#

#

# Basic STONITH support

# Using this directive assumes that there is one stonith

# device in the cluster. Parameters to this device are

# read from a configuration file. The format of this line is:

#

# stonith

#

# NOTE: it is up to you to maintain this file on each node in the # cluster!

#

#stonith baytech /etc/ha.d/conf/stonith.baytech

# STONITH support

# You can configure multiple stonith devices using this directive.

# The format of the line is:

# stonith_host

# is the machine the stonith device is attached

# to or * to mean it is accessible from any host.

# is the type of stonith device (a list of

# supported drives is in /usr/lib/stonith.)

# are driver specific parameters. To see the

# format for a particular device, run:

# stonith -l -t

#

#

# Note that if you put your stonith device access information in

# here, and you make this file publically readable, you're asking

# for a denial of service attack ;-)

#

# To get a list of supported stonith devices, run

# stonith -L

# For detailed information on which stonith devices are supported

# and their detailed configuration options, run this command:

# stonith -h

#

#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword

#stonith_host ken3 rps10 /dev/ttyS1 kathy 0

#stonith_host kathy rps10 /dev/ttyS1 ken3 0

#

# Watchdog is the watchdog timer. If our own heart doesn't beat for

# a minute, then our machine will reboot.

# NOTE: If you are using the software watchdog, you very likely

# wish to load the module with the parameter "nowayout=0" or

# compile it without CONFIG_WATCHDOG_NOWAYOUT set. Otherwise even # an orderly shutdown of heartbeat will trigger a reboot, which is

# very likely NOT what you want.

#

#watchdog /dev/watchdog

#

# Tell what machines are in the cluster

# node nodename ... -- must match uname -n

#node ken3

#node kathy

#

# Less common options...

# Treats 10.10.10.254 as a psuedo-cluster-member

# Used together with ipfail below...

#

#ping 10.10.10.254

#

# Treats 10.10.10.254 and 10.10.10.253 as a psuedo-cluster-member # called group1. If either 10.10.10.254 or 10.10.10.253 are up # then group1 is up

# Used together with ipfail below...

#

#ping_group group1 10.10.10.254 10.10.10.253

#

# Processes started and stopped with heartbeat. Restarted unless # they exit with rc=100

#

#respawn userid /path/name/to/run

#respawn hacluster /usr/lib/heartbeat/ipfail

#

# Access control for client api

# default is no access

#

#apiauth client-name gid=gidlist uid=uidlist

#apiauth ipfail gid=haclient uid=hacluster

###########################

#

# Unusual options.

#

###########################

#

# hopfudge maximum hop count minus number of nodes in config

#hopfudge 1

#

# deadping - dead time for ping nodes

#deadping 30

#

# hbgenmethod - Heartbeat generation number creation method

# Normally these are stored on disk and incremented as needed. #hbgenmethod time

#

# realtime - enable/disable realtime execution (high priority, etc.)

# defaults to on

#realtime off

# debug - set debug level

# defaults to zero

#debug 1

#

# API Authentication - replaces the fifo-permissions-based system of the past

#

#

# You can put a uid list and/or a gid list.

# If you put both, then a process is authorized if it qualifies under either

# the uid list, or under the gid list.

#

# The groupname "default" has special meaning. If it is specified, then

# this will be used for authorizing groupless clients, and any client groups

# not otherwise specified.

#

#apiauth ipfail uid=hacluster

#apiauth ccm uid=hacluster

#apiauth ping gid=haclient uid=alanr,root

#apiauth default gid=haclient

# message format in the wire, it can be classic or netstring, default is classic

#msgfmt netstring

node master

node slave

上面的两个node 后面跟的名字可以自己定,只要在vi /etc/hosts 在其中添加上面的两行就行。

三、安装配置MON相关文件仅仅在主机上安装,从机无需安装

# tar zxvf Time-HiRes-01.20.tar.gz

# cd Time-HiRes-01.20

# perl Makefile.PL

# make

# make install

# tar zxvf Period-1.20.tar.gz

# cd Period-1.20

# perl Makefile.PL

# make

# make install

# tar zxvf Convert-BER-1.3101.tar.gz

# cd Convert-BER-1.3101

# perl Makefile.PL

# make

# make install

# tar zxvf Mon-0.11.tar.gz

# cd Mon-0.11

# perl Makefile.PL

# make

# make install

# tar zxvf mon-0.99.3-47.tar.gz -C /usr/lib/

# cd /usr/lib/

# mv mon-0.99.3-47 mon

# cd mon

# ln -s /usr/lib/mon/etc/ /etc/mon

mon.cf配置

vi /etc/mon/mon.cf 添加如下:

#

# Simplified cluster "mon.cf" configuration file

#

alertdir = /usr/lib/mon/alert.d

mondir = /usr/lib/mon/mon.d

statedir = /usr/lib/mon/state.d

logdir = /var/log/mon/logs

histlength = 500

dtlogging = yes

dtlogfile = /var/log/mon/logs/dtlog

hostgroup master 10.10.10.100 #主机名和虚拟IP

watch master #监控的主机

service mysqld #监控MYSQL服务

interval 5s

monitor mysql.monitor #负责监控MYSQL服务的文件

period wd {Mon-Sun}

alert bring-ha-down.alert #负责停止HEARTBEAT的文件alert mail.alert fire9dingh@https://www.doczj.com/doc/6f6441210.html,#发送电邮的参数

upalert mail.alert fire9dingh@https://www.doczj.com/doc/6f6441210.html,

alertevery 600s

alertafter 3

# cd /usr/lib/mon

# mv mon.d/msql-mysql.monitor mon.d/mysql.monitor

vi /usr/lib/mon/mon.d/mysql.monitor 显示如下:

#!/usr/bin/perl

#

# $Id: msql-mysql.monitor 1.5 Thu, 21 Aug 2003 10:57:47 -0400 trockij $

#

# arguments:

#

# [--mode [msql|mysql]] --username=username --password=password

# --database=database --port=#

# hostname

#

# a monitor to determine if a mSQL or MySQL database server is operational #

# Rather than use tcp.monitor to ensure that your SQL server is responding # on the proper port, this attempts to connect to and list the databases

# on a given database server.

#

# The single argument, --mode [msql|mysql] is inferred from the script name # if it is named mysql.monitor or msql.monitor. Thus, the following two are # equivalent:

#

# ln msql-mysql.monitor msql.monitor

# ln msql-mysql.monitor mysql.monitor

# msql.monitor hostname

# mysql.monitor hostname

#

# and

#

# msql-mysql.monitor --mode msql hostname

# msql-mysql.monitor --mode mysql hostname

#

# use the syntax that you feel more comfortable with.

#

# This monitor requires the perl5 DBI, DBD::mSQL and DBD::mysql modules, # available from CPAN (https://www.doczj.com/doc/6f6441210.html,)

#

# Copyright (C) 1998, ACC TelEnterprises

# Written by James FitzGibbon

#

# This program is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or

# (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

#

use DBI;

use Getopt::Long;

my @details=();

my @failures=();

GetOptions( \%options, "mode=s", "port=i", "username=s", "password=s", "database=s" );

# uncomment these two lines and provide suitable information if you don't

# want to pass sensitive information on the command line

#$options{username} ||= "username";

#$options{password} ||= "password";

if( $0 =~ m/\/msql\.monitor$/ || $options{mode} =~ m/msql/i ) {

$mode = "mSQL";

$options{port} = 1114 if ! $options{port};

} elsif( $0 =~ m/\/mysql\.monitor/ || $options{mode} =~ m/mysql/i) {

$mode = "mysql";

$options{port} = 3306 if ! $options{port};

} else {

print "invalid mode $mode!\n";

exit 1;

}

for $host( @ARGV ) {

my( $dbh ) =

DBI->connect( "DBI:mysql:database=fire9;host=localhost","root","123456",{ 'PrintError' => 1 } ); #仅仅需要修改这一行,改成相应的数据库名、存在的本地用户和密码,host等于的就是localhost. 主从的这个连接信息必须一致,我这里测试用了ROOT帐号

if( ! $dbh ) {

push( @failures, $host);

push( @details, "$host: Could not connect to $mode server on $options{port}: " . $DBI::errstr . "\n");

next;

}

@tables = $dbh->tables();

if( $#tables < 0 ) {

push( @failures, $host);

push( @details, "$host: No tables found for database $options{database}\n");

}

$dbh->disconnect();

}

if (@failures)

{

print join (" ", sort @failures), "\n";

print sort @details if (scalar @details > 0);

exit 1;

}

else

{

exit 0;

}

# chmod 755 mon.d/mysql.monitor

# vi /usr/lib/mon/alert.d/bring-ha-down.alert 添加如下一行

/etc/rc.d/init.d/heartbeat stop

#chmod 755 /usr/lib/mon/alert.d/bring-ha-down.alert

#vi /etc/rc.d/rc.local #添加MON自启动

/usr/lib/mon/mon -f -c /usr/lib/mon/etc/mon.cf

需要检查文件权限

bring-ha-down.alert # chmod 755

mysql.monitor # chmod 755

authkeys # chmod 600

都配置完成就重新启动一下服务器吧。所有的配置都会自动执行的。启动服务器顺序,先启动主服务器再启动从服务器。

通过tail /var/log/messages和tail /var/log/ha-log 来查看是否运行正常,ps –ef也可以看到进程的状态,如果主节点MYSQL服务停止就会发送EMAIL到你的邮箱里面。

MySQL主从复制、搭建、状态检查、中断排查及备库重做 实战手册

美河学习在线https://www.doczj.com/doc/6f6441210.html, MySQL主从复制 MySQL主从复制、搭建、状态检查、中断排查及备库重做 本文档主要对MySQL主从复制进行简单的介绍,包括原理简介、搭建步骤、状态检查、同步中断及排查、备库重建。

目录 一、MySQL主从复制概述 (2) 1、主从复制简介 (2) 2、主从复制原理、机制 (2) 3、主从复制原理图 (3) 二、MySQL主从复制搭建 (4) 1、Master端配置部署 (4) 2、Slave端配置部署 (4) 3、建立主从同步 (4) 三、主从复制状态检查及异常处理 (6) 1、主从复制状态检查 (6) 2、IO_thread异常 (7) 3、sql_thread异常 (8) 4、主从复制延迟 (9)

一、MySQL主从复制概述 1、主从复制简介 MySQL主从复制就是将一个MySQL实例(Master)中的数据实时复制到另一个MySQL实例(slave)中,而且这个复制是一个异步复制的过程。 实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(sql_thread和IO_thread),另外一个进程在 Master(IO进程)上。 2、主从复制原理、机制 要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。 复制的基本过程如下: 1)、Slave上面的IO_thread连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2)、Master接收到来自Slave的IO_thread的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO_thread。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log file的以及bin-log pos; 3)、Slave的IO_thread接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”; 4)、Slave的Sql_thread检测到relay-log中新增加了内容后,会马上解析relay-log 的内容成为在Master端真实执行时候的那些可执行的内容,并在本数据库中执行。

MySQL主从、主主复制及高可用性要点

一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服务器上将这些日志文件重新执行,从而使得slave服务器和master服务器上的数据信息保持同步。 Mysql复制的原理: 将数据分布到多个系统上去,是通过将Mysql的某一台master主机的数据复制到其它(slave)主机上,并重新执行一遍来实现的; 复制过程中一个服务器充当master服务器,而一台或多台其它服务器充当slave服务器。master服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。 这些日志可以记录发送到slave服务器的更新。当一个slaves服务器连接master服务器时,它通知master服务器从服务器在日志中读取的最后一次成功更新的位置。slave服务器接收从那时起发生的任何更新,然后封锁并等待master服务器通知新的更新。 mysql复制的优点: 在slave服务器上执行查询操作,降低master服务器的访问压力 当master服务器上出现了问题可以切换到slave服务器上,不会造成访问中断等问题 在slave服务器上进行备份,以避免备份期间影响master服务器的服务使用及日常访问

Mysql自身的复制功能:是构建大型、高性能应用程序的基础。 mysql支持的复制类型: 基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持 混合类型的复制::默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。 MySQL复制技术的特点: 数据分布(Data distribution ) 备份(Backups) 负载平衡(load balancing) 高可用性和容错性High availability and failover 复制的工作过程: master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); slave将master的binary log events拷贝到它的中继日志(relay log); slave重做中继日志中的事件,将改变反映它自己的数据。

MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒!

前言 作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,助你向大厂“开炮”,面试不再被MySQL难倒。 注意:关于MySQL的内容整理,包括了面试题、学习笔记、使用文档以及Xmind思维图几个部分,需要高清完整版的请转发+关注,然后私信回复“666”获得免费领取方式 01、MySQL 面试题集合总结 1.1 MySQL 面试题(基础部分): ?drop、truncate、delete区别 ?数据库三范式是什么? ?union和union all有什么不同? ?char、varchar2、varchar有什么区别? ?合并查询有哪些? ?SQL语句执行顺序 ?null的含义 ?MySQL、SqlServer、oracle写出字符存储、字符串转时间 ?update语句可以修改结果集中的数据吗? ?B树和B+树的区别 ?你建过索引吗? 建索引的原则 ?索引的类型, 如主键索引 ?查看SQL执行计划

?有十万条数据, 写SQL语句查询其中某字段较大值的几条数据 ?子查询与关联查询的区别 ?MySQL InnoDB、Mysaim的特点? ?乐观锁和悲观锁的区别?? ?行锁和表锁的区别? ?数据库隔离级别是什么?有什么作用? ?MySQL主备同步的基本原理。 ?如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署) ?SQL什么情况下不会使用索引(不包含,不等于,函数) ?一般在什么字段上建索引(过滤数据最多的字段) ?MySQL,B+索引实现,行锁实现,SQL优化 ?如何解决高并发减库存问题 ?数据库事务的几种粒度 1.2 MySQL 面试题(实战部分): ?数据库三范式,根据秒杀场景设计数据表 ?数据库的主从复制 ?死锁怎么解决 ?mysql并发情况下怎么解决(通过事务、隔离级别、锁) ?触发器的作用? ?什么是存储过程?用什么来调用? ?存储过程的优缺点?

mysql主从复制原理

主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下: 1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置; 3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”; 4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。 Mysql为了解决这个风险并提高复制的性能,将Slave端的复制改为两个进程来完成。提出这个改进方案的人是Y ahoo!的一位工程师“Jeremy Zawodny”。这样既解决了性能问题,又缩短了异步的延时时间,同时也减少了可能存在的数据丢失量。当然,即使是换成了现在这样两个线程处理以后,同样也还是存在slave 数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事物中,这些问题都是会存在的。如果要完全避免这些问题,就只能用mysql的cluster来解决了。不过mysql的cluster是内存数据库的解决方案,需要将所有数据都load到内存中,这样就对内存的要求就非常大了,对于一般的应用来说可实施性不是太大。 复制常用架构 Mysql复制环境90%以上都是一个Master带一个或者多个Slave的架构模式,主要用于读压力比较大的应用的数据库端廉价扩展解决方案。因为只要master和slave的压力不是太大(尤其是slave端压力)的话,异步复制的延时一般都很少很少。尤其是自slave端的复制方式改成两个进程处理之后,更是减小了slave端的延时。而带来的效益是,对于数据实时性要求不是特别的敏感度的应用,只需要通过廉价的pc server来扩展slave的数量,将读压力分散到多台slave的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。 Mysql主从复制配置过程: 环境:master: 192.168.0.3 Slave: 192.168.0.4 Mysql版本为5.0.67(编译安装) database: eric 1.Master服务器启动mysql, a)#mysql –uroot –proot b)创建一个有复制权限的用户,只限slave远程连接访问. i. mysql>grant replication slave on *.* to replication@192.168.0.4

mysql数据库主主同步方案

Mysql 数据库主主(master-master)同步方案 一、MySQL同步概述 1.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。 请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。 单向复制有利于健壮性、速度和系统管理: 健壮性:主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。

速度快:通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。 系统管理:使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。 2.MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。 每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。 认识到二进制日志只是一个从启用二进制日志的固定时间点开始的记录非常重要。任何设置的从服务器需要主服务器上的在主服务器上启用二进制日志时的数据库拷贝。如果启动从服务器时,其数据库与主服务器上的启动二进制日志时的状态不相同,从服务器很可能失败。 将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MASTER语句。请注意LOAD DATA FROM MASTER目前只在

MySQL主从同步原理+部署

MySQL主从同步原理+部署 一.主从的作用: 1.可以当做一种备份方式 2.用来实现读写分离,缓解一个数据库的压力 二.MySQL主从备份原理 master 上提供binlog , slave 通过 I/O线程从 master拿取 binlog,并复制到slave的中继日志中 slave 通过 SQL线程从 slave的中继日志中读取binlog ,然后解析到slave中 部署主从环境:主服务器:192.168.1.110(编译好的MySQL5.1版本的数据库)从服务器:192.168.1.120(编译好的MySQL5.1版本的数据库) (温馨提示:主和从数据库版本必须是一样。或者主库的数据库版本必须比从库高,不然会导致很多故障的发生。) 三:生产环境应用MySQL主从同步场景: 1.一般用主库做为提供业务用户写操作(比如:在互联网上写一条微博,这时候就会 写到mysql数据库的主库中) 2.一般用从库做为提供业务用户读操作(比如:在互联网上,我想看一条微博,这时 候里面提供数据就是MySQL数据库的从库中。) (1)在主服务器(192.168.1.110)上操作。 [root@Jiechao ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:5E:6F:A7 inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe5e:6fa7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:141354 errors:0 dropped:0 overruns:0 frame:0 TX packets:140807 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:142083379 (135.5 MiB) TX bytes:17815696 (16.9 MiB) Interrupt:193 Base address:0x2000 [root@Jiechao ~]# vi /etc/https://www.doczj.com/doc/6f6441210.html,f [mysqld]在mysqld下添加以上两行。 server-id = 1 log-bin=jiechao-bin [root@Jiechao ~]# /etc/init.d/mysqld restart Shutting down MySQL[ OK ] Starting MySQL.[ OK ]

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

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

目录 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。主数据库可进行读写操作,主要是进行写操作,从数据库只能读操作。下面是该方案的逻辑架构图:

数据库管理员岗位的主要职责表述

数据库管理员岗位的主要职责表述 本文是关于数据库管理员岗位的主要职责表述,仅供参考,希望对您有所帮助,感谢阅读。 数据库管理员岗位的主要职责表述1 职责: 1、负责生产数据库(MySQL/Redis/MongoDB等)的日常运维、稳定性保障、性能优化; 2、根据业务需求选型数据库存储方案,优化性能,实施集群迁移及扩容,提高业务高可用性和容灾能力; 3、制定数据库监控、备份、容灾策略,确保数据库服务的正常稳定运行和应急响应及时定位和排除数据库故障,并对数据库进行持续优化; 4、提供数据库开发支持,负责SQL代码的上线审核,优化; 5、参与开发数据库运维工具脚本; 6、配合研发制定数据库技术方案,分库分表策略,数据迁移方案。 任职资格 1、具有2年以上DBA实际工作经验,具有中大型互联网数据库运维和管理经验优先; 2、熟悉常用存储引擎的功能和特点以及主从复制原理和实践; 3、熟悉MySQLDBA数据库基本原理,深入理解引擎、事务、锁机制等内部工作原理及优化; 4、熟悉数据库容量规划和分库、分表设计方法,有数据库设计和支持经验,熟悉大数据集群及具有相关维护工作经验; 5、熟悉Linux操作系统,能熟练进行日常系统管理操作; 6、有memcache、redis、mongodb经验优先; 7、善于沟通,积极分享,具有良好的团队协作能力、高度敬业精神. 数据库管理员岗位的主要职责表述2 职责

1、负责数据库的日常操作、安装、配置、监控、负载均衡、实时备份、恢复和管理; 2、依据业务需求优化数据存储结构; 3、通过数据库的日常检查,对性能较差的SQL语句提出优化方案; 4、协助项目其他成员设计关键的SQL语句和触发器、存储过程、表等; 5、负责数据库架构设计、分布式缓存设计等,解决多种业务模式下的可扩展、高可用、负载均衡等关键技术问题. 任职要求 1、相关工作经验2年以上; 2、熟悉Linux系统,能编写Shell或python脚本; 3、掌握数据库的高可用、迁移、扩容、备份恢复、性能监控; 4、熟悉Oracle、Mysql、Sql Server 数据库运行机制、体系架构,熟悉表结构和SQL优化; 5、熟练掌握Oracle数据库维护,能对业务需求和故障进行及时响应和处理,能解决Oracle RAC和DataGuard的故障; 6、熟练掌握MySQ数据库维护;掌握第三方配套工具Mycat、MMM、MHA等原理和实现及其故障排除; 7、熟悉Sql Server数据库维护. 数据库管理员岗位的主要职责表述3 职责: 1.负责全行数据库的日常维护,包括故障排查、性能优化、数据库升级或迁移; 2.负责全行数据库备份规划管理,包括数据库备份配置、故障处理、备份有效性校验。 3.负责全行数据库相关故障的排查、处理、优化,并且提出针对性的预防措施。 4.负责规划全行数据库架构设计方案和实施优化。 任职条件:

mysql数据库复制维护说明

mysql数据库复制维护方法 编写人:胡家惠 日期:2007-9-26 数商的数据库服务器采用一主两从的结构,即一台主数据库服务器,两台从数据库服务器,主服务器负责读写,从服务器只能读取。以下例子中假设主服务器的IP地址是:172.20.16.204。从服务器的IP地址分别是:172.20.16.205,172.20.16.214。主服务器上更新的数据将通过mysql的复制功能复制到其它两台从服务器上,复制是异步进行的,延迟时间正常在3秒左右,如果是小数据量的更新操作,延迟时间将会更小,估计在1秒以下,完全能满足应用的需求。Web 服务器对数据库的访问负载将同时分布到这三台服务器上,从测试的情况看,主服务器的负载明显比从服务器的负载大,一个主要的原因是主服务器负责读写,而从服务器只分配一些查询的负载。 Mysql数据库复制维护主要包括:日常监控和维护,主从切换,从服务器拷贝,根据一个最可靠的从服务器数据生成另外一个从服务器,并把这个最可靠的从服务器升级为主服务器。目标就是当数据库出现故障时,能尽快的修复,最小化故障时间。 一、日常监控和维护 日常监控和维护的目的就是监控mysql复制进程的运行情况,解决发生的故障问题,保证主从服务器数据的一致性。 以下是用作日常监控的几条命令,说明如下: Show master status; 显示主服务器当前复制进程所处的bin文件名和位置 Show slave status\G; 显示从服务器复制进程的状态 Slave stop; 在从服务器上停止复制进程 Slave start; 在从服务器上启动复制进程 Set global sql_slave_skip_counter=1; 跳过一个错误的位置 Change master to master_log_file='mysql-bin.000001',master_log_pos=98; 改变到指定的日志位置点:日志文件mysql-bin.000001,位置98 示例: mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.20.16.204

mysql主从数据库的配置说明文档

一、主从配置的原理: MySQL的 Replication 是一个异步的复制过程,从一个 MySQL instace(我们称之为 Master)复制到另一个MySQL instance(我们称之 Slave)。在 Master 与 Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql 线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master端。 要实现MySQL 的Replication ,首先必须打开Master 端的Binary Log(MySQL-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用“—log-bin”参数选项,或者在 https://www.doczj.com/doc/6f6441210.html,f 配置文件中的 MySQLd 参数组([MySQLd]标识后的参数部分)增加“log-bin”参数项。 MySQL 复制的基本过程如下: 1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置; 3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog文件(MySQL-relay-bin.xxxxxx)的最末端,并将读取到的Master 端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我” 4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave端执行了同样的 Query,所以两端的数据是完全一样的。

mysql双主架构方案设计

mysql双主架构方案设计 mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其他服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接受从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。 mysql_proxy,是处在应用端和数据库服务器之间的程序,支持嵌入性脚本语言Lua。mysql_proxy可以用于分析、监控和转换通信数据,支持数据库层负载均衡和读写分离的功能。 1mysql双主架构设计

Client... 架构说明: ●mysql1和mysql2互为主从关系,数据库间通过复制(Replication)实现数据的同步。 ●client端直接连接mysql_proxy,通过mysql_proxy实现到数据库的负载均衡和读写分 离; ●mysql高可用性架构,常用的有主从复制、主主复制及双主从等形式,基于业务的实际 需要进行选择考虑。 2mysql主从复制配置 2.1主从配置需要注意的点 (1)主从服务器操作系统版本和位数一致;

(2) Master和Slave数据库的版本要一致; (3) Master和Slave数据库中的数据要一致; (4) Master开启二进制日志,Master和Slave的server_id在局域网内必须唯一; 2.2主从配置的步骤 2.2.1M aster上的配置 (1) 安装数据库; (2) 修改数据库配置文件,指明server_id,开启二进制日志(log-bin); (3) 启动数据库,查看当前是哪个日志,position号是多少; (4) 登录数据库,授权数据复制用户(IP地址为从机IP地址,如果是双向主从,这里的还需要授权本机的IP地址,此时自己的IP地址就是从IP地址); (5) 备份数据库(记得加锁和解锁); (6) 传送备份数据到Slave上; (7) 启动数据库; 以下步骤,为单向主从搭建成功,想搭建双向主从需要的步骤: (1) 登录数据库,指定Master的地址、用户、密码等信息(此步仅双向主从时需要); (2) 开启同步,查看状态; 2.2.2S lave上的配置 (1) 安装数据库; (2) 修改数据库配置文件,指明server_id(如果是搭建双向主从的话,也要开启二进制日志

手把手教你实现MySQL双机数据同步

手把手教你实现MySQL双机数据同步 假设目前有两台 MySQL 数据库服务器,如何实现这两台机器的数据同步问题?很多朋友一开始接触MySQL双机同步需求的时候可能会感到不知道从哪里入手,事实上这是MySQL本身就支持的功能之一。本文提供有关MySQL主从同步的初步思路,供大家参考。 AD: 编者按:很多朋友一开始接触MySQL双机同步需求的时候可能会感到不知道从哪里入手,事实上这是MySQL本身就支持的功能之一。本文提供有关MySQL主从同步的初步思路,供大家参考。 一.需求问题 假设目前有两台 MySQL 数据库服务器,如何实现这两台机器的数据同步问题?即在一台机器上修改数据库后,另一台机器会同步更新所修改的信息。 二.解决方案 查资料发现 MySQL 支持单向,异步复制,复制过程中一个服务器充当主服务器,而另一个或多个其他服务器充当从服务器。 原理是这样的: 主服务器将更新写入二进制日志文件,并维护文件的一个索引来跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接受从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。 2.1 测试环境 1.Master : 19 2.168.7.67 (CentOS 5.5 x86_64 ) MySQL Version : 5.0.77 2.Slave: 192.168.56.103 (CentOS 5.3 i386) MySQL Version : 5.0.4 5 备注: Master 和 slave 端的 MySQL 版本最好要一样的,或者 Master 端的版本高于Slave 端 2.2 配置过程 2.2.1 Master 端设置

linux运维mysql

赵班长原创作品系统运维之MySQL DBA UNIXHOT开源社区

赵班长原创作品 系统运维之MySQL DBA 时间:2010年6月3日 姓名:赵班长 版本:1.0 实验目的:通过实验掌握MySQL数据库相关应用。 实验环境:Red Hat Enterprise Linux Server release5.3(Tikanga) 实验简介: UNIXHOT开源社区致力于为想成为系统运维工程师、系统集成工程师、系统架构师、MySQL DBA 和Oracle DBA的互联网朋友们创造一个开源的、共享的、完整的、创新的、一站式的学习和交流平台。欢迎大家加入,让我们成为一个圈子。 注意:本文为从入门到精通的一个一站式学习文档,如果想更深入的学习MySQL,请参考MySQL 的官方文档,也可以在UnixHot开源论坛讨论学习。 此文档持续更新中......学习讨论请进-->【MySQL DBA】版块 实验步骤: 第一章MySQL概述 第二章MySQL源码安装 第三章MySQL Replication 第四章MySQL Proxy 第五章MySQL Cluster 实验内容:

赵班长原创作品MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。它的插入式存储引擎可以让使用者根据实际应用使用不同的存储 1.2MySQL相关链接 MySQL官方网站:https://www.doczj.com/doc/6f6441210.html,/ MySQL社区版本下载地址:https://www.doczj.com/doc/6f6441210.html,/downloads/mysql/ MySQL中文文档:https://www.doczj.com/doc/6f6441210.html,/doc/refman/5.1/zh/index.html 第二章MySQL源码安装 2.1解压并编译安装 [root@MySQL-Master src]#tar zxvf mysql-5.1.45.tar.gz [root@MySQL-Master src]#cd mysql-5.1.45 [root@MySQL-Master mysql-5.1.45]#./configure--prefix=/usr/local/mysql\ --localstatedir=/unixhot/mysql--enable-assembler--with-system-type="RedHat Enterprise"\ --with-client-ldflags=-all-static--with-mysqld-ldflags=-all-static\ --with-pthread--enable-static--with-big-tables--without-ndb-debug\ --with-charset=utf8--with-extra-charsets=all\ --without-debug--enable-thread-safe-client--enable-local-infile--with-plugins=max [root@MySQL-Master mysql-5.1.45]#make&&make install 2.2安装参数介绍 --prefix=/usr/local/mysql//主程序安装目录

利用phpmyadmin设置mysql主从同步(或者备份)

最近由于一个简单需求必须保证多个数据库一致性,因此不得不用到数据库之间的同步。mysql数据库同步,自己本身就做的很好,我们只需要简单设置就可以搞定了,并且加上phpmyadmin就更简单了。这里,我们主要介绍一下怎样通过phpmyadmin辅助设置主从数据库同步。 一、实现同步的原理: 在主数据库与从数据库之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在从数据库端,另外一个线程(IO线程)在主数据库端。 注意: 1.要实现同步,必须先启动主数据库(相当于开启一个服务,等待其他数据库来连接),然后在启动从数据库 2.数据库的版本要一致 二、具体步骤 1.打开主数据库,找到复制功能 选择自己需要同步的数据(或者排除的数据库)生成一段代码,打开住数据库的my.conf(默认:/etc/mysql/https://www.doczj.com/doc/6f6441210.html,f),在配置文件最后加上一行 [mysqld],再加上phpmyadmin生成的代码。即: [mysqld] server-id=3936765 log-bin=mysql-bin

log-error=mysql-bin.err binlog_ignore_db=test 然后重启数据库 /etc/init.d/mysql restart 现在回到phpmyadmin的复制界面,我们可以看到如图则表示主数据库已经配置成功 现在我们就可以添加复制的用户了,可根据自己的需求添加用户, 注意:如果我们添加的用户的【主机】不是127.0.0.1的就必须修改我们的mysql 配置文件,因为mysql默认安装是只允许127.0.0.1连接的。我们需要找到以下两句话,然后注释掉就可以了,当然需要重启mysql #skip-external-locking #bind-address=127.0.0.1 2.现在配置从数据库 同样的,进入从数据库的phpmyadmin的复制界面,选择【从复制】的配置。进入之后,phpmyadmin会默认生成一个随机的线程ID(也可以自己写一个),跟配置主数据库一样,在从数据库的配置文件中加入 [mysqld] server-id=1375673884

高性能Mysql主从架构的复制原理及配置详解

高性能Mysql主从架构的复制原理及配置详解 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。 请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。 1.1 mysql支持的复制类型: (1):基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 一旦发现没法精确复制时,会自动选着基于行的复制。 (2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持 (3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。 1.2 . 复制解决的问题 MySQL复制技术有以下一些特点: (1) 数据分布 (Data distribution ) (2) 负载平衡(load balancing) (3) 备份(Backups) (4) 高可用性和容错行 High availability and failover 1.3 复制如何工作 整体上来说,复制有3个步骤:

Mysql双机互备热备,自动切换

Mysql双机互备热备,自动切换 Mysql双机互备热备,自动切换 星期日, 12/20/2009 - 22:15 — wdlinux 作者:wdlinux https://www.doczj.com/doc/6f6441210.html, QQ:12571192 我的Linux,开源技术,应用方案,集群架构,高可用,负载均衡,分流,性能优化 欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明. Mysql双机互备热备 在实际的应用中,数据库是非常重要和关键的一个环节。在保障数据库安全的同时,提高应用性和缩短出故障后的恢复时间,也同等重要。特别是在一些持续性和实时性要求高的应用中,故障一小时,可能会让你损失几千到几万甚至更高。本方案致力于数据库实时备份,并且在故障发生后以最短的时间恢复和修复 在mysql数据库的备份应用中,主从复制结构是应用的比较广泛,数据同步和实时性都很高,基本上能满足大部分的需求。 本方案基于主从复制结构的基础上,当主库出现故障时,从

库能自动接管主库的功能,向外提供服务,且将自身设置为主库,将这个故障时间和影响缩短至最小,5秒内可切换完成。待原主库修复后,会自动进入从库的备份角色,如此循环。 在本方案的实现中,有两种方法且均基于mysql的主从结构中 1 高可用(High Availability)HA集群,用heartbeat实现及增加了故障后的恢复功能 2 同样是高可用,只是是自己编写脚本程序来监控,切换,恢复 在方法1中,使用稳定的heartbeat开源软件实现,但此方法,需要多一个IP对外访问,同时在监控上,是监控机器的状态而不是mysql,有些情况下,机器是好的但mysql服务挂了,这种情况下就不准确了。不过可以修改监控方式或增加对mysql服务的监控 方法2中,可以不用增加一个对外IP,同时在监控上,可以直接监控mysql的服务,至于稳定性,有待测试。此方法中还有一个问题,就是提供给客户端的数据库连接IP,因为切换后,IP也就变了。如果说更改程序,那不现实。所以,这里可以用域名,不过仍然需要修改域名的IP指向或是修改客户机的hosts文件。本文使用的是修改DNS的方法,因为DNS是自己配置的,可以灵活操作。

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.doczj.com/doc/6f6441210.html,f新增以下内容 server_id=177###服务器id log-bin=mysql-bin###开启日志文件

MySQL丢数据及主从数据不一致的场景-lunique

MySQL丢数据及主从数据不一致的场景 1.相关知识点: innodb_flush_log_at_trx_commit innodb_flush_log_at_timeout sync_binlog relay log、relay log info、master info: master-info-repository relay-log-info-repository sync_relay_log sync_master_info sync_relay_log_info 原文地址:https://www.doczj.com/doc/6f6441210.html,/25704976/viewspace-1318714/ 随着对MySQL的学习,发现了MySQL的很多问题,最重要的就是丢数据的问题。对于丢数据问题,我们应该了解丢数据的场景,这样在以后的学习中多考虑如何去避免及解决这些问题。 2.MySQL数据库层丢数据场景 本节我们主要介绍一下在存储引擎层上是如何会丢数据的。 2.1.InnoDB丢数据 InnoDB支持事务,同Oracle类似,事务提交需要写redo、undo。采用日志先行的策略,将数据的变更在内存中完成,并且将事务记录成redo,顺序的写入redo日志中,即表示该事务已经完成,就可以返回给客户已提交的信息。但是实际上被更改的数据还在内存中,并没有刷新到磁盘,即还没有落地,当达到一定的条件,会触发checkpoint,将内存中的数据(page)合并写入到磁盘,这样就减少了离散写、IOPS,提高性能。 在这个过程中,如果服务器宕机了,内存中的数据丢失,当重启后,会通过redo日志进行recovery重做。确保不会丢失数据。因此只要redo能够实时的写入到磁盘,InnoDB 就不会丢数据。 先来看一下innodb_flush_log_at_trx_commit这个参数: = 0 :每秒 write cache & flush disk

相关主题
文本预览
相关文档 最新文档