折腾缘由
今天机缘巧合和同事聊起Mysql主从复制,经他点拨才知道从数据库同步数据居然只是是单线程,当主数据库写入数据量庞大,数据同步延迟将十分明显。显然,这在生产环境中是不被允许的。既然知道主从同步延迟的根源在与单线程,那么思路就来了,采取多线程不就行了么?上网搜了下,追风刀·丁奇一直关注这个问题,并提供Mysql-Transfer作为Mysql原生主从同步延时的解决方案。说干就干,站在巨人的肩膀上。
由于Transfer本质是一个在Mysql源码上打的Patch,因此既可以当作Slave,也可以当成第三方工具,负责将Master的数据同步发给Slave。最新版本Transfer是基于Percona 5.5.34,而通过yum安装的Mysql版本为5.1。
[root@chenllcentos ~]# rpm -aq | grep mysql
mysql-5.1.73-3.el6_5.x86_64
mysql-devel-5.1.73-3.el6_5.x86_64
mysql-libs-5.1.73-3.el6_5.x86_64
mysql-server-5.1.73-3.el6_5.x86_64
因此考虑编译安装对Mysql进行升级。至于使用yum安装Mysql和初始配置的基本步骤,可参考上一篇博客Mysql主从复制和读写分离方案分析。
编译安装Percona Server
安装前准备
- 卸载Rpm安装的Mysql
检查是否安装有Mysql。
[root@chenllcentos ~]# rpm -aq | grep mysql
若已安装则通过如下命令卸载,否则跳过此步骤。
[root@chenllcentos ~]# rpm -e mysql mysql-devel mysql-libs mysql-server #普通删除模式
[root@chenllcentos ~]# rpm -e --nodeps mysql mysql-devel mysql-libs mysql-server #强行删除模式
安装编译环境
[root@chenllcentos ~]# yum -y install make gcc-c++ cmake bison-devel ncurses ncurses-devel
请确认以上组件都已经安装,否则编译安装Percona Server将不成功。若出现问题怎么办,找谷歌爸爸,相信都能找到解决办法。
- 下载Percona Server
Percona-Server-5.5.34-rel32.0.tar.gz,若下载失败,请使用备用地址。
或者,在Linux下直接使用wget命令:
[root@chenllcentos dev]# wget http://www.percona.com/redir/downloads/Percona-Server-5.5/Percona-Server-5.5.34-rel32.0/source/Percona-Server-5.5.34-rel32.0.tar.gz
下载失败的话,多尝试几次。接下来,步入正题,进行Percona Server编译安装。
具体步骤
Percona Server可以简单理解成Mysql编译安装和Mysql编译安装过程相同。
创建mysql的用户与组
[root@mysql ~]# groupadd -r mysql
[root@mysql ~]# useradd -g mysql -r -s /sbin/nologin mysql
若系统提示:
[root@chenllcentos ~]# groupadd -r mysql
groupadd: group 'mysql' already exists
[root@chenllcentos ~]# useradd -g mysql -r -s /sbin/nologin mysql
useradd: user 'mysql' already exists
说明该服务器之前已安装过Mysql数据库,用户组和用户已存在,直接进入下一步骤即可。
解压Percona Server安装包。
[root@chenllcentos dev]# tar zxvf Percona-Server-5.5.34-rel32.0.tar.gz
进入Percona Server目录,并配置编译环境。
[root@chenllcentos dev]# cd Percona-Server-5.5.34-rel32.0
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# CXX=gcc
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# export CFLAGS CXX CXXFLAGS
接下来,使用cmake进行编译。
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DEXTRA_CHARSETS=all \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DSYSCONFDIR:PATH=/etc \
-DENABLED_PROFILING:BOOL=ON \
-DENABLE_DEBUG_SYNC:BOOL=OFF \
-DMYSQL_DATADIR:PATH=/usr/local/mysql/data \
-DMYSQL_MAINTAINER_MODE:BOOL=OFF \
-DWITH_EXTRA_CHARSETS:STRING=all \
-DWITH_BIG_TABLES:BOOL=ON \
-DWITH_FAST_MUTEXES:BOOL=ON \
-DENABLE-PROFILING:BOOL=ON \
-DWITH_SSL:STRING=bundled \
-DWITH_UNIT_TESTS:BOOL=OFF \
-DWITH_ZLIB:STRING=bundled \
-DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON \
-DWITH_PLUGINS=heap,csv,partition,innodb_plugin,myisam \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=ALL \
-DENABLED_ASSEMBLER:BOOL=ON \
-DENABLED_LOCAL_INFILE:BOOL=ON \
-DENABLED_THREAD_SAFE_CLIENT:BOOL=ON \
-DENABLED_EMBEDDED_SERVER:BOOL=OFF \
-DWITH_CLIENT_LDFLAGS:STRING=all-static \
-DINSTALL_LAYOUT:STRING=STANDALONE \
-DCOMMUNITY_BUILD:BOOL=ON;
这里需要注意,若多次运行cmake,系统将报如下错误:
...
CMake Error at cmake/readline.cmake:85 (MESSAGE): Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.Call Stack (most recent call first):
...
此时需要删除当前目录下CMakeCache.txt文件。
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# rm -rf CMakeCache.txt
再次运行cmake命令即可。编译成功后,可以进行安装。
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# make && make install
编译选项说明
指定安装文件的安装路径时常用的选项。
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #指定残可安装路径(默认的就是/usr/local/mysql)
-DMYSQL_DATADIR=/data/mysql #mysql的数据文件路径
-DSYSCONFDIR=/etc #配置文件路径
编译过程中启用其他存储引擎时指令介绍。
-DWITH_INNOBASE_STORAGE_ENGINE=1 #使用INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 #常应用于日志记录和聚合分析,不支持索引
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 #黑洞存储引擎
编译过程中取消一些存储引擎指令介绍。
-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
#示例如下:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
编译进过程中功能启用的指令介绍。
-DWITH_READLINE=1 #支持批量导入mysql数据
-DWITH_SSL=system #mysql支持ssl会话,实现基于ssl的数据复
-DWITH_ZLIB=system #压缩库
-DWITH_LIBWRAP=0 #是否可以基于WRAP实现访问控制
其他功能指令。
-DMYSQL_TCP_PORT=3306 #默认端口
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #默认套接字文件路径
-DENABLED_LOCAL_INFILE=1 #是否启用LOCAL_INFILE功能
-DEXTRA_CHARSETS=all #是否支持额外的字符集
-DDEFAULT_CHARSET=utf8 #默认编码机制
-DDEFAULT_COLLATION=utf8_general_ci #设定默认语言的排序规则
-DWITH_DEBUG=0 #DEBUG功能设置
-DENABLE_PROFILING=1 #性能分析功能是否启用
关于编译选项说明,资料来源CentOS6.4+MySQL-5.6.12安装详解。
后续配置
复制配置文件my.cnf。
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# cp support-files/my-large.cnf /etc/my.cnf
设置Mysql服务脚本。
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# cp support-files/mysql.server /etc/init.d/mysqld #复制脚本
[root@chenllcentos Percona-Server-5.5.34-rel32.0]# chmod +x /etc/init.d/mysqld #增加可执行权限
[root@chenllcentos ~]# chkconfig --add mysqld #增加至sysV服务
[root@chenllcentos ~]# chkconfig mysqld on #开机自启动
初始化Mysql。
[root@chenllcentos ~]# /usr/local/mysql/scripts/mysql_install_db --datadir=/usr/local/mysql/data --user=mysql
如果如下错误:
FATAL ERROR: Could not find ./bin/my_print_defaults
If you compiled from source, you need to run 'make install' to
copy the software into the correct location ready for operation.
If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.
请新增--basedir
选项。
[root@chenllcentos ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
将Mysql命令添加到环境变量PATH。
[root@chenllcentos ~]# echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
[root@chenllcentos ~]# source /etc/profile
启动Mysql服务。
[root@chenllcentos ~]# service mysqld start
Starting MySQL (Percona Server).. SUCCESS!
最后,配置Mysql用户密码。
[root@chenllcentos ~]# mysqladmin -u root password 'yourpassword'
至此,编译安装Percona Server全部完成。接下来让我们看看,Transfer如何做到主从同步加速。
下一篇,将介绍如何使用Transfer,实现Mysql主从同步加速。