mysql5612源码安装及主从复制_第1页
mysql5612源码安装及主从复制_第2页
mysql5612源码安装及主从复制_第3页
mysql5612源码安装及主从复制_第4页
mysql5612源码安装及主从复制_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Mysql源码安装及主从复制读写分离一Mysql源码安装:一、环境准备:我尝试过以下环境都是能成功的:1、CentOS6.4 minimal镜像最小化缺省安装;2、RedHat6.4 DVD基本服务器安装;3、RedHat5.4 DVD基本服务器安装;4、其他Linux版本未验证。注意系统安装好之后需要配置好网卡,关闭防火墙及SELINUX:1# 关闭Linux防火墙命令 2# chkconfig iptables off3# 修改SELINUX配置4# vim /etc/sysconfig/selinux5SELINUX=enforcing6修改为:7SELINUX=disabled修改完成

2、后,保存并退出,然后重启系统。1、新增mysql用户组1# groupadd mysql2、新增mysql用户1# useradd -r -g mysql mysql3、新建数据库执行文件目录(后面会把编译好的mysql程序安装到这个目录)1# mkdir -p /usr/local/mysql4、新建数据库数据文件目录1# mkdir -p /home/mysql2# mkdir -p /home/mysql/data3# mkdir -p /home/mysql/logs4# mkdir -p /home/mysql/temp注意:上面的第3及第4是为了以后将MySQL的数据文件与执行程序

3、文件分离,如果你打算设置到不同的路径,注意修改对应的执行命令和数据库初始化脚本!5、编辑PATH搜索路径1# vi /etc/profile +2# 在profile文件末尾增加两行3PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH4export PATH使PATH搜索路径立即生效:1# source /etc/profile6、编辑hosts文件,增加一行,加入本机IP和主机名1# vi /etc/hosts +2 yimiju7、安装编译源码所需的工具和库(如果不能在线安装,需要提前配置好本地源,本地源配置方

4、法度娘吧,以后有时间)1# yum -y install wget gcc-c+ ncurses-devel cmake make perl注意:RedHat5.4源中没有cmake,可以手动编译安装cmake,或者升级到RedHat5.9之后再从源中yum安装cmake。8、通过FTP或SFTP将mysql-5.6.12.tar.gz源码包上传到/usr/local/src路径下。如果服务器能上网,也可以通过wget下载mysql-5.6.12.tar.gz。下载地址如下:# cd /usr/local/src# wget四、开始编译安装mysql-5.6.121、进入源码压缩包下载目录#

5、cd /usr/local/src2、解压缩源码包# tar -zxvf mysql-5.6.12.tar.gz3、进入解压缩源码目录# cd mysql-5.6.124、使用cmake源码安装mysql(如果你打算安装到不同的路径,注意修改下面语句中/usr/local/mysql这个路径!)cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -

6、DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/mysql/data -DMYSQL_USER=mysqlDMYSQL_TCP_PORT=3306 -DENABLE_DOWNLOADS=1 -Wno

7、-dev -no-warn-unused-cli上面的这些复制完,回车,然后就开始cmake的过程,一般时间不会很长。运行完以后会出现如下警告Googlemock was not found进入mysql-5.6.11source_downloads目录将gmock-1.6.0.zip放在此目录#unzip gmock-1.6.0.zip# cd gmock-1.6.0#./configure#make然后删除mysql-5.6.11目录下的CMakeCache.txt重新使用cmake进行编译安5、cmake结束后开始编译源码,这一步时间会较长,请耐心等待。1# make6、安装编译好的程序

8、1# make install注意:如果需要重装mysql,在/usr/local/src/mysql-5.6.12在执行下make install就可以了,不需要再cmake和make7、清除安装临时文件1# make clean8、修改目录拥有者# chown -Rf mysql:mysql /usr/local/mysql# chown -Rf mysql:mysql /home/mysql9、进入mysql执行程序的安装路径# cd /usr/local/mysql10、执行初始化配置脚本,创建系统自带的数据库和表(注意路径/home/mysql/data需要换成你自定定义的数据库存放

9、路径)# scripts/mysql_install_db -user=mysql -datadir=/home/mysql/data#初始化脚本在/usr/local/mysql/下生成了配置文件f,需要更改该配置文件的所有者:# chown -Rf mysql:mysql /usr/local/mysql注意:(1)Tips:在启动MySQL服务时,会按照一定次序搜索f,先在/etc目录下找,找不到则会搜索mysql程序目录下是否有f”;(2)需要注意CentOS 6.4版操作系统的最小安装完成后,即使没有安装mysql,在/etc目录下也会存在一个f文件,建议将此文件更名为其他的名字,否

10、则该文件 会干扰源码安装的MySQL的正确配置,造成无法启动。修改/etc/f操作如下:# mv /etc/f /etc/f.bak# 当然也可以删除掉/etc/f这个文件:# rm /etc/f(3)如果你需要用于生产环境,不要急着做下面的mysql启动操作。建议把上一步骤中mysql初始化生成的/usr/local/mysql /f删除,然后把你优化好的mysql配置文件f放到/etc下。(这是我做mysql主从复制和mysql优化的经验!)11、复制服务启动脚本# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mys

11、ql12、启动MySQL服务# service mysql start13、设置开机自动启动服务# chkconfig mysql on14、登录并修改MySQL用户root的密码# mysql -u rootmysql use mysql;mysql GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 123456;mysql update user set Password = password(123456) where User=root;mysql flush privileges;mysql exit;15、检测下上一步MySQL用

12、户root密码是否生效:rootyimiju etc# mysql -u rootERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO)没有密码无法登录,说明密码修改成功了。rootyimiju # mysql -u root -pEnter password: 这里提示时输入你设置的mysql root帐号密码#登录成功有如下提示:Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is

13、 422Server version: 5.6.12-log Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or h for help. Type c to clear

14、 the current input statement.Mysql二Mysql的主从个复制:一、前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。二、MySQL主从复制(读写分离)和集群的区别:我对MySQL也是刚开始研究,不是很专业。我的理解是:1、主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查

15、询操作)。局限性:(1)配置好主从复制之后,同一张表,只能对一个服务器写操作。如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步;据说可以配置成主主方式,但我还没有研究到。(2)主数据库服务器宕机,需要手动将业务系统切换到从数据库服务器。无法做到高可用性(除非再通过部署keepalive做成高可用方案)。2、集群是由N台数据库服务器组成,数据的写入和查询是随机到任意一台数据库服务器的,其他数据库服务器会自动同步数据库的操作。任何一台数据库宕机,不会对整个集群造成大的影响。局限性:我经过测试才知道目前mysql集群版本(MySQL Cluster)只能对NDB存储引擎的数据进行集群

16、同步,如果是INNODB或其他的MySQL存储引擎是不行的。这个也导致了我放弃了在业务系统中应用这种方案。三、回归正题,接下来开始MySQL5.6.12的主从复制教程:1、MySQL5.6开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的。所以此篇教程主要是告诉大家如何通过日志(binlog)方式做主从复制!2、MySQL官方提供的MySQL Replication教程:这个官方教程强烈建议大家阅

17、读(需要一定的英语阅读能力哦!不行就google翻译后再阅读吧)。3、准备工作:(1)配置MySQL主从复制(读写分离)之前,需要在主从两台服务器先安装好MySQL5.6。(2)目前最新的MySQL5.6 GA版本是MySQL5.6.12(点此下载MySQL5.6.12源码包)。个人推荐Linux(RedHat/CentOS 6.4)源码编译安装,具体可以看本站这篇教程:RedHat/CentOS源码编译安装MySQL5.6.12(3)注意:(a)如果你需要用于生产环境,安教程安装MySQL时不要急着做mysql启动操作。建议把mysql初始化生成的/usr/local/mysql/f删除,然

18、后把你优化好的mysql配置文件f放到/etc下。(b)建议主备两台服务器在同一局域网,主备两台数据库网络需要互通。(4)我的环境:主数据库IP:从数据库IP:4、修改主数据库的的配置文件:1mysqld2server-id=13log-bin=mysqlmaster-bin.log4sync_binlog=15#注意:下面这个参数需要修改为服务器内存的70%左右6innodb_buffer_pool_size = 512M7innodb_flush_log_at_trx_commit=18sql_mode=STRICT_TRANS_TABL

19、ES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO9lower_case_table_names=110.log_bin_trust_function_creators=1修改之后要重启mysql:1# /etc/init.d/mysql restart5、修改从数据库的的配置文件(server-id配置为大于1的数字即可):1mysqld2server-id=23log-bin=mysqlslave-bin.log4sync_binlog=15#注意:下面这个参数需要修改为服务器内存的70%左右6innodb

20、_buffer_pool_size = 512M7innodb_flush_log_at_trx_commit=18sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO9lower_case_table_names=110log_bin_trust_function_creators=1修改之后要重启mysql:1# /etc/init.d/mysql restart附一个我已优化过的从数据库配置文件:点此下载6、登录到主数据库:(1)在主数据库上创建用于主从复

21、制的账户(换成你的从数据库IP):1# mysql -uroot -p2mysql GRANT REPLICATION SLAVE ON *.* TO repl IDENTIFIED BY repl;(2)主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标):1mysql FLUSH TABLES WITH READ LOCK;(3)然后克隆一个SSH会话窗口,在这个窗口打开MySQL命令行:1# mysql -uroot -p2mysql SHOW MASTER STATUS;3+-+-+-+-+-+4| File | Posit

22、ion | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |5+-+-+-+-+-+6| mysqlmaster-bin.000001 | 332 | | | |7+-+-+-+-+-+81 row in set (0.00 sec)9mysql exit;在这个例子中,二进制日志文件是mysqlmaster-bin.000001,位置是332,记录下这两个值,稍后要用到。(4)在主数据库上使用mysqldump命令创建一个数据快照:1#mysqldump -uroot -p -h -P3306 -all-databa

23、ses -triggers -routines -events all.sql2# 接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导出完成。(5)解锁第(2)步主数据的锁表操作:1mysql UNLOCK TABLES;7、SSH登录到从数据库:(1)通过FTP、SFTP或其他方式,将上一步备份的主数据库快照all.sql上传到从数据库某个路径,例如我放在了/home/yimiju/目录下;(2)从导入主的快照:1# cd /home/yimiju2# mysql -uroot -p -h -P3306 CHANGE MASTER

24、TO MASTER_HOST=,MASTER_USER=repl,MASTER_PASSWORD=repl,MASTER_LOG_FILE=mysqlmaster-bin.000001,MASTER_LOG_POS=332;3# 然后启动从数据库的复制线程:4mysql START slave;5# 接着查询数据库的slave状态:6mysql SHOW slave STATUS G7# 如果下面两个参数都是Yes,则说明主从配置成功!8Slave_IO_Running: Yes9Slave_SQL_Running: Yes三.Mysql的读写分离: mysql配置读

25、写分离在这里你再也不用担心高手省略了大段代码了,因为我也是新手。下面开整先安装luaLua 是一个小巧的脚本语言。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。先安装可能的依赖包 rootbogon#yum-yinstallgcc*gcc-c+*autoconf*automake*zlib*libxml*ncurses-devel*libmcrypt*libtool*flex*pkgconfig*1. libevent*glib*r

26、eadline-devel2. 3. 4. rootbogon#mkdir/opt/install/5. 6. rootbogon#cd/opt/install/7. 8. rootbogoninstall#wget/ftp/lua-5.1.4.tar.gz9. 10. rootbogoninstall#tarzxvflua-5.2.3.tar.gz11. 12. rootbogoninstall#cdlua-5.2.313. 14. rootbogoninstall#makelinux此时如果出现lua.c:67:31: fatal error: readl

27、ine/readline.h: No such file or directory说明缺少libreadline-dev依赖包1. rootbogoninstall#makeinstall2. 3. rootbogoninstall#exportLUA_CFLAGS=-I/usr/local/includeLUA_LIBS=-L/usr/local/lib-llua-ldlLDFLAGS=-lm下面开始安装mysql-proxy安装之前先看一下自己机器是否是64位系统查看centos内核的版本 rootbogoninstall#cat/etc/issue查看linux版本1. rootbogo

28、ninstall#cat/proc/version2. rootbogoninstall#lsb_release-a如果以上命令都没有出现64字眼说明是32位系统,这里主要是确定你将要下载的mysql-proxy版本应该是哪个。下载地址:.tw/Downloads/MySQL-Proxy/1. rootbogoninstall#cd/opt/install2. 3. rootbogoninstall#wget.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.

29、4-linux-rhel5-x86-32bit.tar.gz4. 5. rootbogoninstall#tarzxvfmysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz6. 7. rootbogoninstall#mkdir/opt/mysql-proxy/8. 9. rootbogoninstall#cp/opt/install/mysql-proxy-0.8.4-linux-rhel5-x86-32bit/*/opt/mysql-proxy/10. 11. rootbogoninstall#cd/opt/mysql-proxy/12. 13. r

30、ootbogoninstall#exportPATH=$PATH:/opt/mysql-proxy/bin/编辑mysql-proxy配置文件1. rootbogoninstall#cpdoc/mysql-proxy/rw-splitting.lua./2. 3. rootbogoninstall#virw-splitting.lua找到:1. ifnotproxy.global.config.rwsplitthen2. proxy.global.config.rwsplit=3. min_idle_connections=4,4. max_idle_connections=8,5. 6. i

31、s_debug=false7. 8. end这里的4、8是指定链接数,大家可以在做试验时调整为1。ok,保存,退出。1. rootbogoninstall#mysql-proxy-proxy-read-only-backend-addresses=32:3306-proxy-backend-addresses=31:3306-proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua&这里的31与32是主从数据库。参见以上命令后缀追加&表示为后端任

32、务。 rootbogoninstall#bg将正在执行命令隐藏到后端 rootbogoninstall#jobs查看正在后端运行的命令1. richardbogon$fg1将后端命令显示到前台打开4040端口防火墙端口,因为mysql-proxy监听端口是4040再也不是3306了。正好做以区分。plain view plain copyprint?1. rootbogoninstall#/sbin/iptables-IINPUT-ptcp-dport4040-jACCEPT2. 3. rootbogoninstall#/etc/rc.d/init.d/iptablessave4. 5. ro

33、otbogoninstall#serviceiptablessave查看监听情况:plain view plain copyprint?1. rootbogoninstall#netstat-tlp|grepmysql-proxy2. 3. tcp00*:yo-main*:*LISTEN13364/mysql-proxyyo-main很奇怪吧,对我也奇怪,不管它了,下面我们测试一下功能吧。刚刚我们提到的31与32两台服务器,131是主,132是从,131是读写,132是只读。myql-proxy的IP是30创建用于读写分离

34、的数据库连接用户在131服务器上操作以下命令:plain view plain copyprint?1. rootbogon#mysql-uroot-p1234562. 3. mysqlgrantallon*.*toproxy130identifiedby123456;由于我们设置了131与132的主从复制,所以此时132也执行了以上命令,我们可以确定一下。在132服务上操作以下命令:plain view plain copyprint?1. mysqlselectuser,password,hostfrommysql.user;2. 3. +-+-+-+4. |use

35、r|password|host|5. +-+-+-+6. |root|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|localhost|7. |root|bogon|8. |root||9. |proxy1|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|30|10. +-+-+-+11. 4rowsinset(0.00sec)没错结果存在。但是我们要做的试验是测试读写分离,所以要让这两台服务器有误差才行。所以暂停132的从服务:plain view plain copyprin

36、t?1. mysqlslavestop;下面我们在131服务器上操作以下命令:1. mysqlinsertintofirst_tbvalues(007,first);2. mysqlinsertintofirst_tbvalues(110,second);最后再到132上确认一下数据是否有误差,下面试验开始。在131上打开4个终端,依次敲以下的命令: rootbogon#mysql-uproxy1-p123456-h30-P40401. 2. mysqlselect*fromfirst_db.first_tb;你会发现结果会有不一样,那证明配置试验成功。也可以多此尝试以

37、上两行代码直到得到结果。试验结束记得将slave start,方法参照追加内容:设置mysql-proxy服务脚本。(其中一种脚本)1. #!/bin/sh2. 3. #4. #mysql-proxyThisscriptstartsandstopsthemysql-proxydaemon5. #6. #chkconfig:-78307. #processname:mysql-proxy8. #description:mysql-proxyisaproxydaemontomysql9. 10. #Sourcefunctionlibrary.11. ./etc/rc.d/init.d/functi

38、ons12. 13. #PROXY_PATH=/usr/local/bin14. PROXY_PATH=/opt/mysql-proxy/bin15. 16. prog=mysql-proxy17. 18. #Sourcenetworkingconfiguration.19. ./etc/sysconfig/network20. 21. #Checkthatnetworkingisup.22. $NETWORKING=no&exit023. 24. #Setdefaultmysql-proxyconfiguration.25. #PROXY_OPTIONS=-daemon26. 27. PRO

39、XY_OPTIONS=-proxy-read-only-backend-addresses=32:3306-proxy-backend-addresses=31:3306-proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua28. 29. PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid30. 31. #Sourcemysql-proxyconfiguration.32. if-f/etc/sysconfig/mysql-proxy;then3

40、3. ./etc/sysconfig/mysql-proxy34. fi35. 36. PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH37. #Bydefaultitsallgood38. RETVAL=039. 40. #Seehowwewerecalled.41. case$1in42. start)43. #Startdaemon.44. echo-n$Starting$prog:45. $NICELEVEL$PROXY_PATH/mysql-proxy$PROXY_OPTIONS-daemon-pid-file=$PROXY_PID-use

41、r=root-log-level=debug-log-file=/opt/mysql-proxy/log/mysql-proxy.log46. RETVAL=$?47. echo48. if$RETVAL=0;then49. touch/var/lock/subsys/mysql-proxy50. echook51. fi52. ;53. stop)54. #Stopdaemons.55. echo-n$Stopping$prog:56. killproc$prog57. RETVAL=$?58. echo59. if$RETVAL=0;then60. rm-f/var/lock/subsys

42、/mysql-proxy61. rm-f$PROXY_PID62. fi63. ;64. restart)65. $0stop66. sleep367. $0start68. ;69. condrestart)70. -e/var/lock/subsys/mysql-proxy&$0restart71. ;72. status)73. statusmysql-proxy74. RETVAL=$?75. ;76. *)77. echoUsage:$0start|stop|restart|status|condrestart78. RETVAL=179. ;80. esac81. exit$RET

43、VAL备注可以用脚本进行启动: 方式:第一步:vim /etc/init.d/mysql-proxy-#!/bin/bash# mysql-proxy This script starts and stops the mysql-proxy daemon# chkconfig: - 78 30# processname: mysql-proxy# description: mysql-proxy is a proxy daemon for mysql# Source function library. /etc/rc.d/init.d/functionsprog=/usr/local/mysq

44、l-proxy/bin/mysql-proxy# Source networking configuration.if -f /etc/sysconfig/network ; then . /etc/sysconfig/networkfi# Check that networking is up. $NETWORKING = no & exit 0# Set default mysql-proxy configuration.ADMIN_USER=adminADMIN_PASSWD=adminADMIN_LUA_SCRIPT=/usr/local/mysql-proxy/share/doc/m

45、ysql-proxy/admin.luaPROXY_OPTIONS=-daemonPROXY_PID=/var/run/mysql-proxy.pidPROXY_USER=mysql-proxy# Source mysql-proxy configuration.if -f /etc/sysconfig/mysql-proxy ; then . /etc/sysconfig/mysql-proxyfiRETVAL=0start() echo -n $Starting $prog: daemon $prog $PROXY_OPTIONS -pid-file=$PROXY_PID -proxy-address=$PROXY_ADDRESS -user=$PROXY_USER -admin-username=$ADMIN_USER -admin-lua-script=$ADMIN_LUA_SCRIPT -admin-password=$ADMIN_PASSWORD RETVAL=$? echo if $RETVAL -eq 0 ; then touch /var/lock/subsys/mysql-proxy fistop() echo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论