分享

实战 centos6.5下mysql

 WindySky 2016-03-23
实战 centos6.5下mysql-5.6.19数据库安装、优化、互为主从 mysql集群 高可用
作者:饮马闪客 发布于:2014-8-7 22:00 Thursday 分类:数据相关

mysql互为主从环境介绍:

系统:centos6.5_64_mini

mysql版本:mysql-5.6.19

实验节点如下:

节点一:192.168.100.21
节点二:192.168.100.22

 

第一部分安装需要用到的库并删除自带mysql (节点一和二)
#  yum -y install gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel cmake perl lsof wget bison
#  rpm -qa|grep mysql
#  rpm -e --allmatches --nodeps mysql-libs-5.1.71-1.el6.x86_64

 

第二部分MYSQL的安装(节点一和二)
1:创建MySQL数据库存放目录、配置用户和用户组
#  /usr/sbin/groupadd mysql
#  /usr/sbin/useradd -s /sbin/nologin -M -g mysql mysql
#  mkdir -p /yunwei8/mysql/data/
#  chown -R mysql:mysql /yunwei8/mysql/

 

2:创建软件下载目录,把所需软件下载
#  mkdir /yunwei8/soft
#  cd /yunwei8/soft
wget http://down./soft/linux/mysql-5.6.19.tar.gz
wget http://down./soft/linux/libunwind-1.1.tar.gz
wget http://down./soft/linux/gperftools-2.2.tar.gz
 
3:安装mysql-5.6.19
#  tar zxvf mysql-5.6.19.tar.gz
#  cd mysql-5.6.19
#  cmake -DCMAKE_INSTALL_PREFIX=/yunwei8/server/mysql -DMYSQL_DATADIR=/yunwei8/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc/ -DWITH_SSL=yes -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=on
#  make
#  make install
#  chmod +w /yunwei8/server/mysql
#  chown -R mysql:mysql /yunwei8/server/mysql/

 

4:创建软连接
#  ln -s /yunwei8/server/mysql/lib/lib* /usr/lib/

 

5:创建my.cnf配置文件,并修改:
设置Mysql
#  cp /yunwei8/server/mysql/support-files/my-default.cnf /etc/my.cnf
#  vi /etc/my.cnf

 

在[mysqld]下添如下行
character-set-server = utf8
default-storage-engine = MyISAM
basedir = /yunwei8/server/mysql
datadir = /yunwei8/mysql/data
log-error = /yunwei8/mysql/mysql_error.log
pid-file = /yunwei8/mysql/mysql.pid
max_allowed_packet = 32M
explicit_defaults_for_timestamp = true

 

6:以mysql用户账号的身份建立数据表:
#  /yunwei8/server/mysql/scripts/mysql_install_db --basedir=/yunwei8/server/mysql --datadir=/yunwei8/mysql/data --user=mysql

 

7:设置mysql开机自动启动服务
#  cp /yunwei8/server/mysql/support-files/mysql.server /etc/init.d/mysqld
#  chkconfig --add mysqld
#  chkconfig --level 345 mysqld on

 

8:修改服务配置文件
#  vi /etc/init.d/mysqld

 

根据设定需要,修改mysqld文件中的下面两项
basedir=/yunwei8/server/mysql
datadir=/yunwei8/mysql/data

 

9:启动mysqld服务
#  service mysqld start

 

10:通过命令行登录管理MySQL服务器并设置root密码(提示输入密码时直接回车):(节点一和二)
#  /yunwei8/server/mysql/bin/mysql -u root -p -S /tmp/mysql.sock
#  mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('000000');
 
退出mysql
#  mysql> exit

 

11:软连接mysql
#  ln -s /yunwei8/server/mysql/bin/mysql /usr/bin
 
12:尝试用root连接mysql
#  mysql -u root -p

 

成功登录后查看状态
#  mysql> status;

 

第三部分:mysql优化(节点一和二)
为MySQL添加TCMalloc库的安装步骤(Linux环境):
1:64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
首先安装libunwind-1.1
#  cd /yunwei8/soft
#  tar zxvf libunwind-1.1.tar.gz
#  cd libunwind-1.1
#  CFLAGS=-fPIC ./configure
#  make CFLAGS=-fPIC
#  make CFLAGS=-fPIC install

 

2:安装google-perftools:
#  cd /yunwei8/soft
#  tar zxvf gperftools-2.2.tar.gz
#  cd gperftools-2.2/
#  ./configure
#  make && make install
#  echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
#  /sbin/ldconfig

 

3:修改MySQL启动脚本(根据你的MySQL安装位置而定)
#  vi /yunwei8/server/mysql/bin/mysqld_safe

 

在# executing mysqld_safe的下一行,加上:
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

 

保存后退出,然后重启MySQL服务器。
#  service mysqld restart

 

4:使用lsof命令查看tcmalloc是否起效:
#  /usr/sbin/lsof -n | grep tcmalloc

 

如果发现以下信息,说明tcmalloc已经起效:
mysqld    11227 mysql  mem       REG                8,1  2171746      18287 /usr/local/lib/libtcmalloc.so.4.1.2

 

第四部分:mysql互为主从配置

第一步防火墙设置(节点一和二)
端口开放
#  /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

 

然后保存:
#  /etc/rc.d/init.d/iptables save

 

第二步配置mysql互为主从

1:登录mysql数据库(节点一和二)

#  mysql-u root -p 

 

2:建立需要同步的数据库(节点一和二)

#  mysql> create database yunwei8;

 

3:添加一个远程用户,名为yunwei8密码为123456,并且只能对yunwei8数据库有权限(节点一和二)

#  mysql> GRANT ALL PRIVILEGES ON yunwei8.* TO yunwei8@"%" IDENTIFIED BY '123456';

 

4:修改/etc/my.cnf文件(节点一)

#  rm -rf /etc/my.cnf

#  vi /etc/my.cnf

添加如下配置代码

[client]
default-character-set = utf8
port            = 3306
socket          = /tmp/mysql.sock


[mysqld]
character-set-server = utf8
default-storage-engine = MyISAM
basedir = /yunwei8/server/mysql
datadir = /yunwei8/mysql/data
log-error = /yunwei8/mysql/mysql_error.log
pid-file = /yunwei8/mysql/mysql.pid
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8

log-bin=mysql-bin
server-id = 1
binlog-do-db=yunwei8
replicate-do-db=yunwei8
binlog-ignore-db=mysql
replicate-ignore-db=mysql
sync_binlog=1
auto_increment_increment = 2
auto_increment_offset = 1
log-slave-updates
slave-skip-errors=all

[mysqldump]
quick
max_allowed_packet = 32M


[mysql]
no-auto-rehash


[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M


[mysqlhotcopy]
interactive-timeout

 

5:修改/etc/my.cnf文件(节点二)

#  rm -rf /etc/my.cnf

#  vi /etc/my.cnf

添加如下配置代码

[client]
default-character-set = utf8
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
character-set-server = utf8
default-storage-engine = MyISAM
basedir = /yunwei8/server/mysql
datadir = /yunwei8/mysql/data
log-error = /yunwei8/mysql/mysql_error.log
pid-file = /yunwei8/mysql/mysql.pid

port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8

log-bin=mysql-bin
server-id       = 2
binlog-do-db=yunwei8
replicate-do-db=yunwei8
binlog-ignore-db=mysql
replicate-ignore-db=mysql
sync_binlog=1
auto_increment_offset = 2
auto_increment_increment = 2
log-slave-updates
slave-skip-errors=all


[mysqldump]
quick
max_allowed_packet = 32M


[mysql]
no-auto-rehash


[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M


[mysqlhotcopy]
interactive-timeout

 

6:重启两台服务器的mysql(节点一和二)
#  service mysqld restart

 
7:给两个节点授权同步账户, 赋予REPLICATION SLAVE权限(节点一和二)

#  mysql -u root -p
#  mysql> GRANT REPLICATION SLAVE ON *.* to 'abc'@'%' identified by 'abc';

 为abc用户赋予任何数据库中任何表上的REPLICATION SLAVE权限, 此用户可以在网络任意位置访问, 访问时以密码abc标记

 

8:开启一个权限跟ROOT一样的远程账户用于后期脚本监控(节点一和二)

#  GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY '123456';

 

9:锁表(锁表状态下不能退出SSH,否则会失败,使用SSH可以另外克隆一个)(节点一和二)

#  mysql -u root -p
#  mysql> FLUSH TABLES WITH READ LOCK;

 

10:查看节点一状态(记录二进制开始文件,位置)

#  mysql> show master status;

显示:
#  mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     1051 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

11:查看节点二状态(记录二进制开始文件,位置)

#  mysql> show master status;

显示:
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      764 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

12:节点一连接节点二
#  mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.22',MASTER_USER='abc', MASTER_PASSWORD='abc',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=764;

 

12.1:开启节点一同步进程
mysql> START SLAVE;

 

12.2:查看节点一同步状态是否正常

mysql> SHOW SLAVE STATUS\G;

 

 *************************** 1. row ***************************

……………………(省略部分)
Slave_IO_Running: Yes  //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。


13:节点二连接节点一

mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.21',MASTER_USER='abc', MASTER_PASSWORD='abc',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1051;

 

13.1开启节点二同步进程
mysql> START SLAVE;

 

13.2查看节点二同步状态是否正常

mysql> SHOW SLAVE STATUS\G;

 

 *************************** 1. row ***************************

……………………(省略部分)
Slave_IO_Running: Yes  //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。


14:解锁节点一和节点二
mysql> UNLOCK TABLES;


15:退出节点一和节点二的mysql,至此mysql的互为主从已经实现了
mysql> exit;

 

 

第五部分:mysql配置文件详解

[client]
#设置mysql客户端默认字符集
default-character-set = utf8

 

#指定默认端口
port  = 3306

 

#是个UNIX域socket文件,这种socket效率比基于TCP/IP的socket高,但是缺点是不能跨机器连接,mysql提供这个东西是为了改善本地连接的速度
socket  = /tmp/mysql.sock


[mysqld]
#服务端使用的字符集
character-set-server = utf8

 

#创建新表时将使用的默认存储引擎
default-storage-engine = MyISAM

 

#基准路径,其他路径都相对于这个路径
basedir = /yunwi8/server/mysql

 

# mysql数据库文件所在目录
datadir = /yunwei8/mysql/data

 

#错误日志存放路径
log-error = /yunwei8/mysql/mysql_error.log

 

#进程存放位置
pid-file = /yunwei8/mysql/mysql.pid

port  = 3306
socket  = /tmp/mysql.sock

 

#不使用系统锁定,要使用myisamchk,必须关闭服务器
skip-external-locking

 

#myisam索引buffer,只有key没有data
key_buffer_size = 384M

 

#增长到max_allowed_packet字节
max_allowed_packet = 32M

 

#主要用于设置table高速缓存的数量
table_open_cache = 512

 

#排序buffer大小;线程级别
sort_buffer_size = 2M

 

#以全表扫描(Sequential Scan)方式扫描数据的buffer大小 ;线程级别
read_buffer_size = 2M

 

#MyISAM以索引扫描(Random Scan)方式扫描数据的buffer大小 ;线程级别
read_rnd_buffer_size = 8M

 

#MyISAM 设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区
myisam_sort_buffer_size = 64M

 

#线程缓存
thread_cache_size = 8

 

#查询缓存大小
query_cache_size = 32M

 

#同时运行的线程的数据 此处最好为CPU个数两倍。本机配置为CPU的个数
thread_concurrency = 8

 

#以下为互为主从配置选项
#启用二进制日志
log-bin=mysql-bin

 

#表示是本机的序号为1,一般来讲就是master的意思。
server-id = 1

 

#要记录日志的数据库,如果需要多个重复设置这个选项即可
binlog-do-db=yunwei8

 

#需要复制的数据库名,如果需要多个数据库,重复设置这个选项即可
replicate-do-db=yunwei8

 

#不要记录日志的数据库名,如果需要多个重复设置这个选项即可
binlog-ignore-db=mysql

 

#不需要复制的数据库名,如果需要多个数据库,重复设置这个选项即可
replicate-ignore-db=mysql

 

#默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘同步。
sync_binlog=1

 

#字段一次递增多少
auto_increment_increment = 2

 

#自增字段的起始值,这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
auto_increment_offset = 1

 

#表示如果一个MASTER挂掉的话,另外一个马上接管;一定要加上,否则不会把更新的记录写到二进制文件里
log-slave-updates

 

#跳过错误,继续执行复制操作
slave-skip-errors=all

[mysqldump]
quick
max_allowed_packet = 32M


[mysql]
#这个配置段设置启动MySQL服务的条件;在这种情况下,no-auto-rehash确保这个服务启动得比较快。
no-auto-rehash

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多