MySQL节点部署说明

MySQL节点部署说明


1.MySQL的编译安装

    考虑到MySQL多版本和多分支的特点,综合性能、可用性、成本等因素,我们建议使用Percona公司开发的MySQL,该版本主要使用了XtraDB存储引擎(对于这个存储引擎的特性,以后再专门介绍),完全兼容Innodb,在Innodb_Plugin基础之上进行了增强,支持标准事务的ACID(原子性、一致性、隔离性、持久性)、支持MVCC(Multi-Version Concurrency Control,提供并发控制)、具备更佳的性能、开源可以免费使用,同时Percona公司还提供了开源的物理备份工具(xtrabackup),可以顺利地对使用XtraDB存储引擎的数据库进行快速的物理备份。关于这个分支的详细信息可以查看博客: http://www.mysqlperformanceblog.com/ 。

   考虑到版本的成熟性和稳定度,我们建议下载MySQL-5.1版本的源代码,下载的地址列表见: http://www.percona.com/downloads/Percona-Server-5.1/ ,可以考虑选用5.1.47-11.2 (源代码大小 23.7 MB),这个版本网易线上也在大规模的使用,从使用的效果来看,还是非常稳定的。

在安装之前需要检查编译MySQL所需的一些库是否已经安装。在一般的Linux 系统中,可能需要用如下命令安装这些依赖库:

  autoconf  automake1.9  libtool  m4  libncurses5-dev   bison   ncurses-devel  gcc  g++

从Percona网站上下载MySQL源代码,保存在本地

http://www.percona.com/downloads/Percona-Server-5.1/Percona-Server-5.1.47-11.2/source/Percona-Server.tar.gz ,或者可以从我这儿来取,对MySQL打了部分的Patch

将压缩文件解压到$dir目录下

进入到$dir下,添加configure 文件为可执行权限

    $ cd $dir

    $ chmod +x configure

开始编译安装,分下面三步执行

 

 $./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-local-infile --enable-thread-safe-client --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-plugins=innodb_plugin,partition  --with-big-tables --with-readline 


$ make 


$ make install  //由于是安装在/usr目录下,这步需要切换到root用户下执行


                         MySQL 源码编译参数说明

参数 涵义

--prefix 指定MySQL安装路径,最好是安装到指定的目录

--with-extra-charsets 指定安装扩展字符集

--enable-local-infile 指定允许本地导入文件

--enable-thread-safe-client 指定线程安全模式

--enable-assembler 指定支持汇编,可提升性能

--with-client-ldflags 静态编译,提升性能13%

--with-mysqld-ldflags 静态编译,提升性能13%

--with-plugins=innodb_plugin,partition   指定安装xtradb存储引擎,分区插件,如果想要利用分区功能,必须指定partition插件

--with-big-tables 指定支持超大表


编译完毕后,需要在相应的目录下创建MySQL启动时所需要的配置文件


 编译过程中的常见异常:


checking for termcap functions library... configure: error: No curses/termcap library found


  ncurses-devel 没有安装


  ../depcomp: line 571: exec: g++: not found


  g++ 没有安装


Warning: Bison executable not found in PATH

 

  bision没有安装

2.MySQL的配置启动

MySQL安装完毕后,需要做相应的配置后,再启动MySQL。


禁用swap

su root 

echo 0 > /proc/sys/vm/swappiness

   这样修改的话,只是临时有效,如果机器重启,这个值会重新恢复为100 ;为了达到永

久生效,可以修改/etc/sysctl.conf文件,在/etc/sysctl.conf上添加vm.swappiness=0 。这

里需要解释下原因。

    Linux有很多很好的内存、IO调度机制,但是并不会适用于所有场景。对于DBA来说,

Linux比较让人头疼的一个地方是,它不会因为MySQL很重要就避免将分配给MySQL的

地址空间映射到swap上。对于频繁进行读写操作的系统而言,数据看似在内存而实际上在

磁盘是非常糟糕的,响应时间的增长很可能直接拖垮整个系统。作为DBA,怎样尽量避免

MySQL使用swap?比如说为什么会产生swap。假设我们的物理内存是16G,swap是4G。

如果MySQL本身已经占用了12G物理内存,而同时其他程序或者系统模块又需要6G内存,

这时候操作系统就可能把MySQL所拥有的一部分地址空间映射到swap上去)。

    /etc/sysctl.conf上中的参数vm.swappiness决定了Linux是倾向于使用swap,还是倾向

于释放文件系统cache和buffer(这个大小是多少,可以在root用户下利用FREE命令查看

之)。

在内存紧张的情况下,数值越低越倾向于释放文件系统cache。当然,这个参数只能减少

使用swap的概率,并不能避免Linux使用swap。想想有内存可以使用,干嘛还要使用SWAP

呢?swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=

100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

创建MySQL帐号

useradd mysql 

passwd mysql

创建MySQL数据目录,这里MySQL的数据目录和配置文件最好放在统一的文件

目录下,数据目录最好采用软链接的形式,这里要注意原始数据目录的权限,如:

[mysql@localhost mysql]$ ls -lh  /home/mysql/mysql/

total 4.0K

-rw-r--r-- 1 mysql mysql 2.1K Jul  5 14:54 my1.cnf

lrwxrwxrwx 1 mysql mysql   16 Jul  4 10:50 mysql -> /opt/mysql-test/


[mysql@localhost mysql]$ ls -lh  /opt/|grep mysql-test

drwxr-xr-x 4 mysql mysql 4.0K Jul  5 14:54 mysql-test

生成MySQL配置文件

根据MySQL配置文件模板生成MySQL配置文件my.cnf,放在/home/mysql/mysql这个目录下,my.cnf根据模板进行以下修改:

替换#port_holder#为你自己打算使用的端口,这里假设为4321

替换#path_holder#为数据存放的目录,假定为 /home/mysql/mysql/mysql

替换#ip_holder#为当前主机的内网IP

替换#user_holder#为启动MySQL的用户,一般为mysql

模板配置文件如下:


[client]

port            = #port_holder#

socket          = #path_holder#/mysqld.sock


[mysqld_safe]

user            = #user_holder#

nice            = 0

ledir           =/usr/local/mysql/libexec

[mysqld]

server-id = 3

bind-address            = #ip_holder#  //注意:如果是配置VIP的话,这个参数不要设置

port                   = #port_holder#

pid-file                 = #path_holder#/mysqld.pid

socket                  = #path_holder#/mysqld.sock

basedir                 = /usr/local/mysql

datadir                 = #path_holder#

innodb_data_home_dir    = #path_holder#

innodb_log_group_home_dir       = #path_holder#

tmpdir                  = #path_holder#

log-error               = #path_holder#/mysqld.log

slow_query_log          =1

slow_query_log_file     = #path_holder#/mysql-slow.log


log_bin                 = #path_holder#/mysql-bin.log

log_slave_updates            //中继操作使用也记录日志到binary-log

skip-slave-start              //MySQL启动的时候,不启动复制

auto_increment_increment  =2  //如果是M-M结构,该参数为M的个数

auto_increment_offset     =2   //如果是M-M结构,该参数为该实例的编号

user                    = #user_holder#

language                = /usr/local/mysql/share/mysql/english

table_cache             = 512

long_query_time         = 4

max_connections         = 800

query_cache_type        = 0

default-character-set      = utf8

default-storage-engine     = innodb

skip-external-locking

expire_logs_days        = 7

max_binlog_size         = 100M

innodb_buffer_pool_size = 200M           //根据机器的实际情况设置,一般为内存的75%

innodb_data_file_path   = ibdata1:512M:autoextend

innodb_autoextend_increment     = 128

innodb_log_files_in_group       = 2

innodb_log_file_size            = 512M

innodb_lock_wait_timeout        = 5

innodb_flush_method            = O_DIRECT

innodb_flush_log_at_trx_commit   = 2

innodb_file_per_table = 1


innodb_file_format         =Barracuda

innodb_file_format_check   =Barracuda

innodb_adaptive_checkpoint  =estimate

innodb_expand_import       = 1

innodb_read_io_threads      = 1

innodb_stats_method        = nulls_unequal

innodb_thread_concurrency  = 12

innodb_write_io_threads    = 1

innodb_io_capacity         =800


[mysqldump]

quick

quote-names

max_allowed_packet      = 16M

default-character-set       = utf8


[mysql]

default-character-set = utf8

具体的各个参数的含义,在后续的优化文档中介绍说明。

初始化MySQL数据库

cd /home/mysql/mysql

mysql_install_db --defaults-file=my.cnf

启动MySQL

mysqld_safe --defaults-file=/home/mysql/mysql/my.cnf &

查看文件列表

[mysql@localhost mysql]$ ls -lh  /home/mysql/mysql/mysql/

total 1.6G

-rw-rw---- 1 mysql mysql 512M Jul  5 14:54 ibdata1

-rw-rw---- 1 mysql mysql 512M Jul  5 14:54 ib_logfile0

-rw-rw---- 1 mysql mysql 512M Jul  4 10:51 ib_logfile1

-rw-rw---- 1 mysql mysql   63 Jul  5 14:54 master.info

drwx------ 2 mysql mysql 4.0K Jul  4 10:48 mysql

-rw-rw---- 1 mysql mysql  125 Jul  5 14:54 mysql-bin.000001

-rw-rw---- 1 mysql mysql  106 Jul  5 14:54 mysql-bin.000002

-rw-rw---- 1 mysql mysql   82 Jul  5 14:54 mysql-bin.index

-rw-rw---- 1 mysql mysql  19K Jul  5 14:54 mysqld.log

-rw-rw---- 1 mysql mysql  12K Jul  4 18:27 mysqld.log-old

-rw-rw---- 1 mysql mysql    5 Jul  5 14:54 mysqld.pid

-rw-rw---- 1 mysql mysql  156 Jul  5 14:54 mysqld-relay-bin.000003

-rw-rw---- 1 mysql mysql  251 Jul  5 14:54 mysqld-relay-bin.000004

-rw-rw---- 1 mysql mysql   52 Jul  5 14:54 mysqld-relay-bin.index

srwxrwxrwx 1 mysql mysql    0 Jul  5 14:54 mysqld.sock

-rw-rw---- 1 mysql mysql 2.8K Jul  5 14:54 mysql-slow.log

-rw-rw---- 1 mysql mysql   51 Jul  5 14:54 relay-log.info

drwx------ 2 mysql mysql 4.0K Jul  4 10:48 test

MySQL默认为生成一个名为root的超级用户,且没有密码,安全性不好,因此先设置MySQL本机超级用户密码:

mysql --defaults-file=/home/mysql/mysql/my.cnf -u root

mysql> set password = password(‘xxxxxx‘);


至此MySQL的启动已经完毕,遇到异常的情况下要多多查看错误日志文件mysqld.log,上面记录了MySQL在运行过程中的详细信息,类似于Oracle中的alter日志文件。千万不要执行rm  -rf  /home/mysql/mysql 操作,对于线上环境的话,尽量让最少的人使用root帐号和mysql帐号,尽量在自己的帐号下进行操作(把自己的帐号添加到mysql这个用户组下即可完成大部分的操作)。


本文出自 “DavideyLee” 博客,请务必保留此出处http://davideylee.blog.51cto.com/8703117/1530105

MySQL节点部署说明,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。