linux下Mysql主从备份+读写分离配置.docx
- 文档编号:9127689
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:60.27KB
linux下Mysql主从备份+读写分离配置.docx
《linux下Mysql主从备份+读写分离配置.docx》由会员分享,可在线阅读,更多相关《linux下Mysql主从备份+读写分离配置.docx(26页珍藏版)》请在冰豆网上搜索。
linux下Mysql主从备份+读写分离配置
Mysql主从,mysql-proxy代理读写分离
前言3
一、MySQL的安装与配置3
1.安装cmake3
2.确保以下所需系统软件包已经被安装4
3.安装前的系统设置4
建立mysql安装目录及数据存放目录4
创建用户和用户组4
赋予数据存放目录权限4
4.从configure更换为cmake4
configure与cmake参数对照指南:
4
5.编译安装MySQL5.5.x5
6.配置并初始化数据库6
创建f配置文件6
初始化数据库6
创建管理MySQL数据库的shell脚本6
赋予shell脚本可执行权限:
6
启动MySQL:
6
通过命令行登录管理MySQL服务器(提示输入密码时直接回车):
6
为root帐户设置初始密码6
删除本机匿名连接的空密码帐号6
二、MySQL主从复制7
场景描述:
7
2.1主服务器上进行的操作7
启动mysql服务7
通过命令行登录管理MySQL服务器7
授权给从数据库服务器192.168.10.1317
查询主数据库状态7
2.2配置从服务器7
修改从服务器的配置文件/opt/mysql/etc/f7
启动mysql服务7
通过命令行登录管理MySQL服务器7
执行同步SQL语句7
正确执行后启动Slave同步进程8
主从同步检查8
如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
8
2.3验证主从复制效果9
主服务器上的操作9
在主服务器上创建表first_tb9
在主服务器上的表first_tb中插入记录9
在从服务器上查看9
三、MySQL读写分离10
场景描述:
10
3.1MySQL的安装与配置10
3.2检查系统所需软件包10
3.3编译安装lua10
3.4安装配置MySQL-Proxy11
创建mysql-proxy服务管理脚本11
脚本参数详解:
13
配置并使用rw-splitting.lua读写分离脚本14
修改读写分离脚本rw-splitting.lua14
3.5测试读写分离效果15
创建用于读写分离的数据库连接用户15
为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能15
关闭Slave同步进程15
连接MySQL-Proxy15
登陆成功后,在first_db数据的first_tb表中插入两条记录15
查询记录15
通过读操作并没有看到新记录16
经验分享:
16
补充:
17
1.彻底解除主从复制关系17
2.让slave不随MySQL自动启动17
需要限定同步哪些数据库,有3个思路:
17
如果想实现主-从(主)-从这样的链条式结构,需要设置:
18
前言
Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。
但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。
因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力这样的方案来进行部署与实施的。
如下图所示:
一、MySQL的安装与配置
具体的安装过程,建议参考我的这一篇文章:
值得一提的是,我的安装过程都是源码包编译安装的,并且所有的配置与数据等都统一规划到了/opt/mysql目录中,因此在一台服务器上安装完成以后,可以将整个mysql目录打包,然后传到其它服务器上解包,便可立即使用。
1.安装cmake
MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具。
因此,我们首先要在系统中源码编译安装cmake工具。
#wgethttp:
//www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
#tarzxvfcmake-2.8.4.tar.gz
#cdcmake-2.8.4
#./configure
#make
#makeinstall
2.确保以下所需系统软件包已经被安装
通过rpm-qa|grepname的方式验证以下软件包是否已全部安装。
gcc*gcc-c++*autoconf*automake*zlib*libxml*ncurses-devel*libgcrypt*libtool*
如果缺少相关的软件包,可通过yum-yinstall的方式在线安装,或直接从系统安装光盘中找到并通过rpm-ivh的方式安装。
3.安装前的系统设置
建立mysql安装目录及数据存放目录
#mkdir/opt/mysql
#mkdir/opt/mysql/data
创建用户和用户组
#groupaddmysql
#useradd-gmysqlmysql
赋予数据存放目录权限
#chownmysql:
mysql-R/opt/mysql/data
4.从configure更换为cmake
我相信大多数人都已经习惯了之前的configure方式,并且所使用的参数也是比较个性化的,换成cmake之后,这一方面会带来不少的麻烦。
还好,MySQL的官方网站提供了二者的参数对照表,我们可以尽可能的保留之前的参数,来编译配置新的MySQL版本。
configure与cmake参数对照指南:
以我自己为例,之前我一直使用的参数为:
./configure--prefix=/opt/mysql/\
--sysconfdir=/opt/mysql/etc\
--localstatedir=/opt/mysql/data\
--with-tcp-port=3306\
--with-unix-socket-path=/tmp/mysqld.sock\
--with-mysqld-user=mysql\
--enable-assembler\
--with-extra-charsets=all\
--enable-thread-safe-client\
--with-big-tables\
--with-readline\
--with-ssl\
--with-embedded-server\
--enable-local-infile\
--with-plugins=partition,innobase,myisammrg
经过与cmake的参数对照之后,去除掉已经被取消的参数(大多数是因为新版本已经默认启用),cmake的参数配置如下:
cmake-DCMAKE_INSTALL_PREFIX=/opt/mysql\
-DSYSCONFDIR=/opt/mysql/etc\
-DMYSQL_DATADIR=/opt/mysql/data\
-DMYSQL_TCP_PORT=3306\
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock\
-DMYSQL_USER=mysql\
-DEXTRA_CHARSETS=all\
-DWITH_READLINE=1\
-DWITH_SSL=system\
-DWITH_EMBEDDED_SERVER=1\
-DENABLED_LOCAL_INFILE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1
5.编译安装MySQL5.5.x
#wget
#tarzxvfmysql-5.5.13.tar.gz
#cdmysql-5.5.13
#cmake-DCMAKE_INSTALL_PREFIX=/opt/mysql\
-DSYSCONFDIR=/opt/mysql/etc\
-DMYSQL_DATADIR=/opt/mysql/data\
-DMYSQL_TCP_PORT=3306\
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock\
-DMYSQL_USER=mysql\
-DEXTRA_CHARSETS=all\
-DWITH_READLINE=1\
-DWITH_SSL=system\
-DWITH_EMBEDDED_SERVER=1\
-DENABLED_LOCAL_INFILE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1
#make
#makeinstall
在make与makeinstall的时候可以看到进度百分比,感觉这一点要比configure方式要好。
6.配置并初始化数据库
创建f配置文件
#mkdir/opt/mysql/log
#mkdir/opt/mysql/etc
#cpsupport-files/my-f/opt/mysql/etc/f
初始化数据库
执行前需赋给scripts/mysql_install_db文件执行权限
#chmod755scripts/mysql_install_db
#scripts/mysql_install_db--user=mysql--basedir=/opt/mysql/--datadir=/opt/mysql/data/
创建管理MySQL数据库的shell脚本
#mkdir/opt/mysql/init.d
#cpsupport-files/mysql.server/opt/mysql/init.d/mysql
赋予shell脚本可执行权限:
#chmod+x/opt/mysql/init.d/mysql
启动MySQL:
#/opt/mysql/init.d/mysqlstart
通过命令行登录管理MySQL服务器(提示输入密码时直接回车):
#/opt/mysql/bin/mysql-uroot-p-S/tmp/mysql.sock
输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678):
GRANTALLPRIVILEGESON*.*TO'admin'@'localhost'IDENTIFIEDBY'12345678';
GRANTALLPRIVILEGESON*.*TO'admin'@'127.0.0.1'IDENTIFIEDBY'12345678';
为root帐户设置初始密码
#/opt/mysql/bin/mysqladmin-urootpassword'new-password'
删除本机匿名连接的空密码帐号
/opt/mysql/bin/mysql-uroot-p'new-password'
mysql>usemysql;//选择系统数据库mysql
mysql>selectHost,User,Passwordfromuser;//查看所有用户
mysql>deletefromuserwherepassword="";
mysql>flushprivileges;
mysql>selectHost,User,Passwordfromuser;//确认密码为空的用户是否已全部删除
mysql>exit;
二、MySQL主从复制
场景描述:
主数据库服务器:
192.168.10.130,MySQL已经安装,并且无应用数据。
从数据库服务器:
192.168.10.131,MySQL已经安装,并且无应用数据。
2.1主服务器上进行的操作
启动mysql服务
/opt/mysql/init.d/mysqlstart
通过命令行登录管理MySQL服务器
/opt/mysql/bin/mysql-uroot-p'new-password'
授权给从数据库服务器192.168.10.131
mysql>GRANTREPLICATIONSLAVEON*.*to'rep1'@'192.168.10.131'identifiedby‘password’;
查询主数据库状态
Mysql>showmasterstatus;
+------------------+----------+--------------+------------------+
|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
+------------------+----------+--------------+------------------+
|mysql-bin.000005|261|||
+------------------+----------+--------------+------------------+
记录下FILE及Position的值,在后面进行从服务器操作的时候需要用到。
2.2配置从服务器
修改从服务器的配置文件/opt/mysql/etc/f
将server-id=1修改为server-id=10,并确保这个ID没有被别的MySQL服务所使用。
启动mysql服务
/opt/mysql/init.d/mysqlstart
通过命令行登录管理MySQL服务器
/opt/mysql/bin/mysql-uroot-p'new-password'
执行同步SQL语句
mysql>changemasterto
master_host=’192.168.10.130’,
master_user=’rep1’,
master_password=’password’,
master_log_file=’mysql-bin.000005’,
master_log_pos=261;
正确执行后启动Slave同步进程
mysql>startslave;
主从同步检查
mysql>showslavestatus\G
==============================================
****************1.row*******************
Slave_IO_State:
Master_Host:
192.168.10.130
Master_User:
rep1
Master_Port:
3306
Connect_Retry:
60
Master_Log_File:
mysql-bin.000005
Read_Master_Log_Pos:
415
Relay_Log_File:
localhost-relay-bin.000008
Relay_Log_Pos:
561
Relay_Master_Log_File:
mysql-bin.000005
Slave_IO_Running:
YES
Slave_SQL_Running:
YES
Replicate_Do_DB:
……………省略若干……………
Master_Server_Id:
1
1rowinset(0.01sec)
==============================================
其中Slave_IO_Running与Slave_SQL_Running的值都必须为YES,才表明状态正常。
如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
(1)主数据库进行锁表操作,不让数据再进行写入动作
mysql>FLUSHTABLESWITHREADLOCK;
(2)查看主数据库状态
mysql>showmasterstatus;
(3)记录下FILE及Position的值。
将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。
(4)取消主数据库锁定
mysql>UNLOCKTABLES;
2.3验证主从复制效果
主服务器上的操作
在主服务器上创建数据库first_db
mysql>createdatabasefirst_db;
QueryOk,1rowaffected(0.01sec)
在主服务器上创建表first_tb
mysql>createtablefirst_tb(idint(3),namechar(10));
QueryOk,1rowaffected(0.00sec)
在主服务器上的表first_tb中插入记录
mysql>insertintofirst_tbvalues(001,’myself’);
QueryOk,1rowaffected(0.00sec)
在从服务器上查看
mysql>showdatabases;
=============================
+--------------------+
|Database|
+--------------------+
|information_schema|
|first_db|
|mysql|
|performance_schema|
|test|
+--------------------+
5rowsinset(0.01sec)
=============================
数据库first_db已经自动生成
mysql>usefirst_db
Databasechaged
mysql>showtables;
=============================
+--------------------+
|Tables_in_first_db|
+--------------------+
|first_tb|
+--------------------+
1rowinset(0.02sec)
=============================
数据库表first_tb也已经自动创建
mysql>select*fromfirst_tb;
=============================
+------+------+
|id|name|
+------+------+
|1|myself|
+------+------+
1rowsinset(0.00sec)
=============================
记录也已经存在
由此,整个MySQL主从复制的过程就完成了,接下来,我们进行MySQL读写分离的安装与配置。
三、MySQL读写分离
场景描述:
数据库Master主服务器:
192.168.10.130
数据库Slave从服务器:
192.168.10.131
MySQL-Proxy调度服务器:
192.168.10.132
以下操作,均是在192.168.10.132即MySQL-Proxy调度服务器上进行的。
3.1MySQL的安装与配置
具体的安装过程与上文相同。
3.2检查系统所需软件包
通过rpm-qa|grepname的方式验证以下软件包是否已全部安装。
gcc*gcc-c++*autoconf*automake*zlib*libxml*ncurses-devel*libmcrypt*libtool*flex*pkgconfig*
libevent*glib*
若缺少相关的软件包,可通过yum-yinstall方式在线安装,或直接从系统安装光盘中找到并通过rpm-ivh方式安装。
3.3编译安装lua
MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua。
lua可通过以下方式获得
从http:
//www.lua.org/download.html下载源码包
从搜索相关的rpm包
这里我们建议采用源码包进行安装
cd/opt/install
wgethttp:
//www.lua.org/ftp/lua-5.1.4.tar.gz
tarzvfxlua-5.1.4.tar.gz
cdlua-5.1.4
visrc/Makefile
在CFLAGS=-O2-Wall$(MYCFLAGS)这一行记录里加上-fPIC,更改为CFLAGS=-O2-Wall-fPIC$(MYCFLAGS)来避免编译过程中出现错误。
makelinux
makeinstall
cpetc/lua.pc/usr/lib/pkgconfig/
exportPKG_CONFIG_PATH=$PKG_CONFIG_PATH:
/usr/lib/pkgconfig
3.4安装配置MySQL-Proxy
MySQL-Proxy可通过以下网址获得:
http:
//mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
推荐采用已经编译好的二进制版本,因为采用源码包进行编译时,最新版的MySQL-Proxy对automake,glib以及libevent的版本都有很高的要求,而这些软件包都是系统的基础套件,不建议强行进行更新。
并且这些已经编译好的二进制版本在解压后都在统一的目录内,因此建议选择以下版本:
32位RHEL5平台:
http:
//mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz
64位RHEL5平台:
http:
//mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.1-linux-rhel5-x86-64bit.tar.gz
测试平台为RHEL532位,因此选择32位的软件包
wgethttp:
//mysql.cd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux Mysql 主从 备份 读写 分离 配置
![提示](https://static.bdocx.com/images/bang_tan.gif)