1-1 MySQL二进制安装手册

MySQL安装和升级

dba_aj@163.com
2018年7月12日星期四

TOC


1、概述

2、安装环境

1. 版本说明

新业务建议使用大版本下最新GA版本

下载二进制安装包 https://dev.mysql.com/downloads/mysql/
归档历史版本 https://downloads.mysql.com/archives/community/
安装说明 https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

2. 安装介质

CentOS release 6.9 (Final)

3. 目录规划

/data/3306
|-- arch #binlog目录
|-- backup # 备份及导出目录
|-- base  # 软件目录
|-- data # 数据目录
|-- etc   # 配置目录
|-- log # 日志目录
|-- relay_log      #relay_log目录
`-- tmp    # 临时文件目录

4. 用户规划

groupadd mysql 
useradd -r -g mysql -s /bin/false mysql

5. 防火墙配置

Centos6/Red6
service iptables stop
chkconfig iptables off

Centos7/Red7
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

6. 修改资源限制

vim mysql_install_init.sh
bash ./mysql_insall_init.sh
modify_para(){
limit_cn=`cat /etc/security/limits.conf |grep -i 'modify by initsys'|wc|awk '{print $1}'`
if [ $limit_cn -eq 0 ] 
then
    echo -e "\n###### modify by initsys ######" >> /etc/security/limits.conf
    echo "* soft nproc 1024000" >> /etc/security/limits.conf
    echo "* hard nproc 1024000" >> /etc/security/limits.conf
    echo "* soft nofile 1024000" >> /etc/security/limits.conf
    echo "* hard nofile 1024000" >> /etc/security/limits.conf

    echo -e "\nmysql soft nproc 1024000" >> /etc/security/limits.conf
    echo "mysql hard nproc 1024000" >> /etc/security/limits.conf
    echo "mysql soft nofile 1024000" >> /etc/security/limits.conf
    echo "mysql hard nofile 1024000" >> /etc/security/limits.conf
fi

sysctl_cn=`cat /etc/sysctl.conf |grep 'modify by initsys'|wc|awk '{print $1}'`
if [ $sysctl_cn -eq 0 ]
then
    echo -e "\n###### modify by initsys ######" >> /etc/sysctl.conf
    echo fs.aio-max-nr = 1048576 >> /etc/sysctl.conf
    echo fs.file-max = 6815744 >> /etc/sysctl.conf
    echo vm.swappiness = 10 >> /etc/sysctl.conf
    echo net.core.rmem_max = 4194304 >> /etc/sysctl.conf
    echo net.core.wmem_default = 262144 >> /etc/sysctl.conf
    echo net.core.wmem_max = 1048586 >> /etc/sysctl.conf
    echo kernel.msgmnb = 65536 >> /etc/sysctl.conf
    echo kernel.msgmax = 655360 >> /etc/sysctl.conf
    echo kernel.sem = 250 32000 100 142 >> /etc/sysctl.conf
    echo kernel.shmmni = 4096 >> /etc/sysctl.conf
    echo kernel.shmall = 1073741824 >> /etc/sysctl.conf
    echo kernel.shmmax = 4398046511104 >> /etc/sysctl.conf
    echo net.ipv4.ip_local_port_range = 5000 65500 >> /etc/sysctl.conf
    echo net.core.rmem_default = 262144 >> /etc/sysctl.conf
    echo net.ipv4.tcp_max_syn_backlog = 8192 >> /etc/sysctl.conf
    echo net.core.somaxconn = 8192 >> /etc/sysctl.conf
    echo net.ipv4.tcp_keepalive_time = 60 >> /etc/sysctl.conf
    echo net.ipv4.tcp_keepalive_probes = 3 >> /etc/sysctl.conf
    echo net.ipv4.tcp_keepalive_intvl = 15 >> /etc/sysctl.conf
    echo net.ipv4.tcp_fin_timeout = 30 >> /etc/sysctl.conf
fi
}

modify_grub(){
#edi_flag=`cat /etc/redhat-release |grep 'release 5'|wc|awk '{print $1}'`
#if [ $edi_flag -eq 1 ]
#then
    mv /boot/grub/grub.conf /boot/grub/grub.conf_bak
    sed "s/.*default.*/default=1/" /boot/grub/grub.conf_bak > /boot/grub/grub.conf
    cat /boot/grub/grub.conf
#fi
}


modify_para
modify_grub

3、二进制安装MySQL数据库

1. 上传和解压

mkdir /data ;  ln -s /usr/local/mysql/ /data/3306
tar -xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /data/3306
cd /data/3306
mv mysql-5.7.26-linux-glibc2.12-x86_64/  base
mkdir data log arch relay_log backup tmp  etc

2. my.cnf配置

目录位置:/data/3306/etc/my.cnf
配置内容:

#适用于所有客户端程序读取
[client]
port = 3306
socket = /data/3306/data/mysql.sock

[mysql]
no_auto_rehash # 当表多时,自动避免收集很多元数据信息,不能自动补全
prompt = "\\R:\\m:\\s\\d>" #H:M:S:DB
pager = "more"            
default-character-set = utf8mb4 

[mysqld]
##base setting
port = 3306
socket = /data/3306/data/mysql.sock #建议设置socket的位置在数据目录
server-id = 10111
report_host = 192.168.10.111 #show slave status 中主机IP
basedir = /data/3306/base  
datadir = /data/3306/data  
tmpdir = /data/3306/tmp
user = mysql #为避免用户--user=root向my.cnf文件添加选项
log_error = /data/3306/log/error.log
innodb_file_per_table = 1 # 独立表空间
lower_case_table_names = 1 #不区分大小写,库名、表名、表别名、变量名将以小写处理
character_set_server = utf8mb4                                      
collation_server = utf8mb4_bin          

##connection
skip-ssl
skip_name_resolve = 1 #不解析客户端连接主机名,,授权表只用IP地址或localhost
max_connections = 1500 #最大连接数
max_allowed_packet = 64M #数据包最大大小


#innodb_buffer_pool_size = 10G #buffer pool大小,70%mem,如果设置太大超出内存,容易OOM
#innodb_buffer_pool_instances = 8 #将缓冲池划分区域,较少池内争用,大于1G默认8个

##redologfile、ibdata
innodb_flush_log_at_trx_commit = 1 #默认1,0提交时不写日志,每秒写日志且刷盘,1提交时写日志并刷盘,2提交时写日志,每秒刷盘
innodb_log_files_in_group = 3 #redo log文件个数
#innodb_log_file_size = 2G #redo log文件大小,SSD 2G

## AS master
sync_binlog = 1    
log-bin = /data/3306/arch/mysql-bin # 设置binlog路径和文件前缀名称
binlog_rows_query_log_events = 1 #在binlog中记录原生SQL
log_bin_trust_function_creators = 1 #默认关闭,将function写入binlog,避免默认情况下回阻止function的创建
binlog_format = row #行模式复制
max_binlog_size = 1G #binlog文件大小

## AS slave 
relay_log = /data/3306/relay_log/relay-bin #设置relay log路径和文件前缀名称
relay_log_recovery = 1 #开启新中继日志,从SQL执行位置重新拉取,清理老relay log
sync_relay_log = 1 #relay log的刷盘方式,0依赖OS,n,n个事件写入relay log后刷盘
skip_slave_start = 1 #避免从库slave线程自动启动

3. 初始化数据库

touch /data/3306/log/error.log
chown -R mysql: /data/3306/
cd /data/3306/base
./scripts/mysql_install_db --defaults-file=/data/3306/etc/my.cnf   --user=mysql   # 5.6 初始化

# ubuntu 可能需要解决依赖 apt install numactl libaio-dev 
./bin/mysqld  --defaults-file=/data/3306/etc/my.cnf  --initialize-insecure --user=mysql         #5.7 初始化

注意:

  1. 有些时候,需要提前创建error.log 如果不在数据目录下
  2. 重新初始化,清空数据目录。
  3. 数据目录出现ibdata、logfile、mysql库、IS库(5.5没有)、PS库、sys库(5.7有)初始化正常
  4. 否则检查目录权限、my.cnf中对应目录是否创建且有权限、my.cnf中资源系统能分配

4. PATH变量设置

优点 :设置path变量之后,对于mysql的很多程序都能直接使用
缺点:对于多实例的情况下,很容易造成生产的问题,比如:已有5.6mysql服务在运行,PATH变量设置的$5.6basedir/bin,想初始化或启动5.7的服务,必须使用5.7的绝对路径的命令,不然启动了一个5.6mysqld服务

echo 'PATH=/data/3306/base/bin:$PATH' >>/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH
which mysql

4、启动和安全检查

1. 启动

# 修改权限
chown -R mysql:mysql /data/3306/

# 5.6启动
numactl --interleave=all /data/3306/bin/mysqld_safe --defaults-file=/data/3306/etc/my.cnf --ledir=/data/3306/base/bin/ &

# 5.7启动
numactl --interleave=all /data/3306/base/bin/mysqld_safe  --defaults-file=/data/3306/etc/my.cnf  &
[1] 2435
#2018-03-16T10:05:19.864783Z mysqld_safe Logging to '/data/mysql20/data/error.log'.


# 查看启动日志
tailf -100 /data/3306/log/error.log

2. 登录数据库

初始化密码为空,直接登录

# socket登录
mysql -uroot
mysql  -uroot  --socket=/data/3306/data/mysql.sock

3 密码设置

登录后设置密码

mysql> flush privileges;

#修改密码
# 5.6
mysql> set password for root@localhost = password('root');
#5.6
alter user root@'localhost' identified by 'root';

4 安全性设置

使用自带的mysql_secure_installation程序

cd /data/3306/base/bin/
./mysql_secure_installation 
./mysql_secure_installation -S /data/3306/data/mysql.sock

mysql_secure_installation
Enter current password for root (enter for none): # 密码为空,直接回车
Change the root password? [Y/n] Y #修改密码
Remove anonymous users? [Y/n] y #移除匿名用户. ,5.7默认没有匿名用户
Disallow root login remotely? [Y/n] y #禁止root用户远程登陆root@’%’,5.7没有root@'%'用户
Remove test database and access to it? [Y/n] y #移除test数据库 ,5.7无test数据库
Reload privilege tables now? [Y/n] y #刷新权限表

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 

posted @ 2019-08-20 10:19  DBA_AJ  阅读(215)  评论(0编辑  收藏  举报