dba_aj@163.com
2018年7月12日星期四
MySQL安装和升级
1、概述
2、安装环境
1. 版本说明
2. 安装介质
3. 目录规划
4. 用户规划
5. 防火墙配置
6. 修改资源限制
3、二进制安装MySQL数据库
1. 上传和解压
2. my.cnf配置
3. 初始化数据库
4. PATH变量设置
4、启动和安全检查
1. 启动
2. 登录数据库
3 密码设置
4 安全性设置
1、概述
2、安装环境
1. 版本说明
2. 安装介质
3. 目录规划
4. 用户规划
5. 防火墙配置
6. 修改资源限制
3、二进制安装MySQL数据库
1. 上传和解压
2. my.cnf配置
3. 初始化数据库
4. PATH变量设置
4、启动和安全检查
1. 启动
2. 登录数据库
3 密码设置
4 安全性设置
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 "
###### 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 "
mysql 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 "
###### 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 初始化
注意:
- 有些时候,需要提前创建error.log 如果不在数据目录下
- 重新初始化,清空数据目录。
- 数据目录出现ibdata、logfile、mysql库、IS库(5.5没有)、PS库、sys库(5.7有)初始化正常
- 否则检查目录权限、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 #刷新权限表