02 MySQL标准化、自动化部署
原文链接: 02 MySQL标准化、自动化部署
为什么数据目录和日志目录需要分开?
这里的分开,我理解是将MySQL的数据目录和日志目录分别放到不同类型的磁盘中。
假设生产环境中服务器上有两种类型的磁盘,分别是SSD和SAS,SSD比SAS的响应时间要快(SSD响应时间约0.1毫秒,SAS的响应时间约10毫秒),为了更好的利用磁盘,一般会把活跃的数据放到SSD上,冷数据放到SAS磁盘上。
数据目录下的数据一般是随机读写的热数据,放到SSD盘中会有较高的响应速度;
日志目录下的日志是顺序读写的冷数据,放到SAS盘中满足写日志高吞吐量的需求。
如何标准化配置多实例?(例如:一台物理主机上部署3306与3307两个实例)
标准化配置多实例,主要是标准化每个实例的目录和内存设置,这样每个实例的参数设置也很容易达到标准化。标准化配置的MYSQL实例,方便实施监控及运维管理。
因一个MySQL实例最多占用64G的物理内存,所以在物理内存较高的服务器上,一般会安装多个MySQL实例,MySQL不同实例是通过端口来区别的。
例如:一台64G的物理主机上部署3306与3307两个MYSQL实例
标准化目录
实例1:
/data/my3306
/log/my3306
实例2:
/data/my3307
/log/my3307
# /data 目录挂载到SSD盘上
# /log 目录挂载到SAS盘上
标准化内存
实例1:
15G: InnoDB buffer cache
5G : mysql server层
实例2:
15G: InnoDB buffer cache
5G : mysql server层
OS:
24G
标准化参数
结合标准化的目录及内存设置,设置标准化的参数
详细描述MySQL编译安装的过程(截图安装步骤)
关闭防火墙和SELINUX
service iptables status
#------------------------------------------------
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
#------------------------------------------------
service iptables stop
#------------------------------------------------
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
#------------------------------------------------
service iptables status
#------------------------------------------------
iptables: Firewall is not running.
#------------------------------------------------
chkconfig iptables off
vi /etc/selinux/config
#------------------------------------------------
SELINUX=disabled
#------------------------------------------------
配置sysctl.conf
# 查看服务器内存
free
#------------------------------------------------
total used free shared buffers cached
Mem: 8174352 616628 7557724 172 151904 253892
-/+ buffers/cache: 210832 7963520
Swap: 16531452 0 16531452
#------------------------------------------------
vi /etc/sysctl.conf
#------------------------------------------------
# 修改
kernel.shmmax = 4398046511104
# 添加
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
#------------------------------------------------
# kernel.shmmax算法:修改为物理内容的50%、60%
# 8G:kernel.shmmax = (8G*1024*1024*1024*1024)*50% = 4398046511104
# 使配置立即生效
sysctl -p
检查是否已安装MySQL
rpm -qa | grep mysql
#------------------------------------------------
mysql-libs-5.1.73-7.el6.x86_64
#------------------------------------------------
# 删除mysql-libs-5.1.73-7.el6.x86_64包
rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
下载MySQL源码
Download MySQL Community Server https://dev.mysql.com/downloads/mysql/5.6.html#downloads
Select Version: 5.6.35 -> Select Platform: Source Code
-> 选择【Generic Linux (Architecture Independent), Compressed TAR Archive】下载
# 配置yum源,安装lrzsz(代替ftp上传和下载的工具)
mkdir /media/disk
mkdir /media/cdrom
mount /dev/cdrom /media/cdrom
cp -rf /media/cdrom/* /media/disk
umount /media/cdrom
cp /etc/yum.repos.d/public-yum-ol6.repo /etc/yum.repos.d/public-yum-ol6.repo.bak
vi /etc/yum.repos.d/public-yum-ol6.repo
#------------------------------------------------
name=Oracle Linux $releasever Latest ($basearch)
baseurl=file:///media/disk/Server
gpgcheck=0
enabled=1
#------------------------------------------------
yum -y install lrzsz
# 上传到服务器的/u01目录下
mkdir /u01
cd /u01
rz
# 选择mysql源码包,上传
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring mysql-5.6.35.tar.gz...
100% 31413 KB 15706 KB/sec 00:00:02 0 Errors
ll /u01/mysql*
-rw-r--r--. 1 root root 32167628 Jan 17 11:16 /u01/mysql-5.6.35.tar.gz
添加MySQL用户和组
groupadd -g 501 mysql
useradd -u 501 mysql -g mysql
echo "mysql123" | passwd --stdin mysql
id mysql
uid=501(mysql) gid=501(mysql) groups=501(mysql)
配MySQL环境变量
vi /home/mysql/.bash_profile
#------------------------------------------------
PATH=$PATH:$HOME/bin:/u01/my3306/bin
#------------------------------------------------
创建目录及授权
mkdir -p /u01/my3306/data
mkdir -p /u01/my3306/log/iblog
mkdir -p /u01/my3306/log/binlog
mkdir -p /u01/my3306/run
mkdir -p /u01/my3306/tmp
chown -R mysql:mysql /u01/my3306
chmod -R 755 /u01/my3306
解压mysql5.6
cd /u01
tar xvpf mysql-5.6.35.tar.gz
安装cmake及相关依赖包
yum install -y cmake gcc gcc-c++ ncurses-devel bison zlib libxml openssl
编译并安装
cd /u01/mysql-5.6.35
cmake \
-DCMAKE_INSTALL_PREFIX=/u01/my3306 \
-DINSTALL_DATADIR=/u01/my3306/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_SSL=yes \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/u01/my3306/run/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DSYSCONFDIR=/etc \
-DWITH_READLINE=on
# 第一次CMAKE出现错误提示
#---------------------------------------------------------------------------------------------
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
OPENSSL_INCLUDE_DIR
used as include directory in directory /u01/mysql-5.6.35/CMakeFiles/CMakeTmp
#---------------------------------------------------------------------------------------------
#安装openssl-devel包
yum -y install openssl-devel
#重新cmake需要删除当前目录下CMakeCache.txt,然后再重新执行
rm -rf CMakeCache.txt
#编译并安装
make
make install
MySQL参数配置
cd /u01/my3306
vi my.cnf
#----------------------------------------------------------
[client]
port=3306
socket=/u01/my3306/mysql.sock
[mysql]
pid_file=/u01/my3306/run/mysqld.pid
[mysqld]
autocommit=1
general_log=off
explicit_defaults_for_timestamp=true
# system
basedir=/u01/my3306
datadir=/u01/my3306/data
max_allowed_packet=1g
max_connections=3000
max_user_connections=2800
open_files_limit=65535
pid_file=/u01/my3306/run/mysqld.pid
port=3306
server_id=101
skip_name_resolve=ON
socket=/u01/my3306/run/mysql.sock
tmpdir=/u01/my3306/tmp
#binlog
log_bin=/u01/my3306/log/binlog/binlog
binlog_cache_size=32768
binlog_format=row
expire_logs_days=7
log_slave_updates=ON
max_binlog_cache_size=2147483648
max_binlog_size=524288000
sync_binlog=100
#logging
log_error=/u01/my3306/log/error.log
slow_query_log_file=/u01/my3306/log/slow.log
log_queries_not_using_indexes=0
slow_query_log=1
log_slave_updates=ON
log_slow_admin_statements=1
long_query_time=1
#relay
relay_log=/u01/my3306/log/relaylog
relay_log_index=/u01/my3306/log/relay.index
relay_log_info_file=/u01/my3306/log/relay-log.info
#slave
slave_load_tmpdir=/u01/my3306/tmp
slave_skip_errors=OFF
#innodb
innodb_data_home_dir=/u01/my3306/log/iblog
innodb_log_group_home_dir=/u01/my3306/log/iblog
innodb_adaptive_flushing=ON
innodb_adaptive_hash_index=ON
innodb_autoinc_lock_mode=1
innodb_buffer_pool_instances=8
#default
innodb_change_buffering=inserts
innodb_checksums=ON
innodb_buffer_pool_size= 128M
innodb_data_file_path=ibdata1:32M;ibdata2:16M:autoextend
innodb_doublewrite=ON
innodb_file_format=Barracuda
innodb_file_per_table=ON
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_lock_wait_timeout=10
innodb_log_buffer_size=67108864
innodb_log_file_size=1048576000
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=60
innodb_open_files=60000
innodb_purge_threads=1
innodb_read_io_threads=4
innodb_stats_on_metadata=OFF
innodb_support_xa=ON
innodb_use_native_aio=OFF
innodb_write_io_threads=10
[mysqld_safe]
datadir=/u01/my3306/data
#----------------------------------------------------------
# 编译后重新修改目录权限
chown -R mysql:mysql /u01/my3306
初始化MySQL脚本
su - mysql
cd /u01/my3306/scripts
./mysql_install_db --defaults-file=/u01/my3306/my.cnf \
--datadir=/u01/my3306/data --basedir=/u01/my3306 --user=mysql
启动MySQL
/u01/my3306/bin/mysqld_safe --defaults-file=/u01/my3306/my.cnf --user=mysql &
登录MySQL
mysql
# 或者
mysql -h127.0.0.1 -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.35-log Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)