MySQL 二进制安装
一、前言
● 介绍:业务环境安装 MySQL 一般都会通过二进制来安装,今天就记录一下业务环境二进制安装 MySQL 过程。
● 环境:CentOS 7 安装:MySQL 5.7+
二、安装 MySQL
1. 首先从官网下载自己需要安装版本的 MySQL 二进制包,上传到 /opt 路径下
[root@db01 opt]# ls mysql-5.7.29-el7-x86_64.tar.gz [root@db01 opt]#
2. 用户组权限设置:
groupadd mysql useradd -r -g mysql -s /bin/false mysql
3. 规划 MySQL 安装路径:
安装目录:/usr/local/mysql 数据目录:/data/mysql57
3. 解压安装包并移动到安装目录:
tar -zxvf mysql-5.7.29-el7-x86_64.tar.gz mv mysql-5.7.29-el7-x86_64 /usr/local/mysql [root@db01 mysql]# cd /usr/local/mysql [root@db01 mysql]# ls bin docs include lib LICENSE man README share support-files [root@db01 mysql]#
4. 创建数据目录:
mkdir -p /data/mysql57/{data,logs,tmp,run} [root@db01 mysql]# cd /data/mysql57/ [root@db01 mysql57]# ls data logs run tmp [root@db01 mysql57]#
5. 现在数据目录和安装目录都已经准备完成,接下来开始授权:
chown -R mysql:mysql /data/mysql57 chown -R mysql:mysql /usr/local/mysql
6. 接下来开始初始化 MySQL:
cd /usr/local/mysql/bin/ ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql57/data
6. 没有报错则表示初始化完成,可以查看数据目录
[root@db01 /]# cd /data/mysql57/data/ [root@db01 data]# ls auto.cnf client-key.pem ib_logfile1 public_key.pem undo001 ca-key.pem ib_buffer_pool mysql server-cert.pem undo002 ca.pem ibdata1 performance_schema server-key.pem client-cert.pem ib_logfile0 private_key.pem sys [root@db01 data]#
7. 接下来启动 MySQL 首先先准备好 my.cnf 文件:
[client] port = 3306 socket = /data/mysql_57/data/mysql.sock [mysql] prompt = "\u@mysql \R:\m:\s [\d]>" port = 3306 socket = /data/mysql_57/data/mysql.sock [mysqld] # 用户 user = mysql # 端口 port = 3306 # 安装目录 basedir = /usr/local/mysql # 数据目录 datadir = /data/mysql_57/data # sock 文件目录 socket = /data/mysql_57/data/mysql.sock # 临时文件目录 tmpdir = /data/mysql_57/tmp # 错误日志目录 log-error = /data/mysql_57/logs/error.log # Server id server-id = 553306 # 二进制日志 log-bin = /data/mysql_57/logs/mysql-bin # binlog 清理机制 expire_logs_days = 10 # 日志格式 推荐为 row binlog_format = ROW # 双一参数 sync_binlog = 1 # binlog 缓存 如果有大事务 可以提升 binlog 写入效率 binlog_cache_size = 4M # binlog 使用最大内存 max_binlog_cache_size = 4G # 单 binlog 文件大小 max_binlog_size = 500M # 中继日志目录 relay_log = /data/mysql_57/logs/mysql-relay # GTID gtid_mode = on # 强制GTID的一致性 enforce_gtid_consistency = 1 # 隔离级别 transaction_isolation = READ-COMMITTED # innodb 最大缓存区 操作系统内存的 70%-80% 最佳 innodb_buffer_pool_size = 2048M # 独立的缓冲池实例,建议每个实例大小至少为 1 G 参考 buffer pool 大小设置 innodb_buffer_pool_instances = 2 # 默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中 innodb_buffer_pool_load_at_startup = 1 # 默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘 innodb_buffer_pool_dump_at_shutdown = 1 # 共享表空间大小 innodb_data_file_path = ibdata1:500M:autoextend # 临时表空间 innodb_temp_data_file_path = ibtmp1:200M:autoextend # redo 刷写机制 双一参数之一 innodb_flush_log_at_trx_commit = 1 # redo buffer size innodb_log_buffer_size = 32M # redo 文件大小 innodb_log_file_size = 128MB # redo 日志组数 默认为 2 innodb_log_files_in_group = 2 # 排序缓存大小 innodb_sort_buffer_size = 1048576 # doublewrite 两次写机制 innodb_doublewrite = 1 # 开启慢日志组 slow_query_log = 1 # 慢日志目录 slow_query_log_file = /data/mysql_57/logs/slow.log # 查询大于多少秒会记录到慢日志中 long_query_time = 5 # 是否记录未使用索引的 SQL log_queries_not_using_indexes = 0 # MySQL 允许的最大连接 max_connections = 1000 # 单个用户限制的最大连接数,默认是不限制 max_user_connections = 64 #最大连接错误数,防止密码暴力破解 max_connect_errors = 10000 # PID 文件 pid-file = mysql.pid # Server 编码 character-set-server = utf8mb4 # Server 比较规则 collation_server = utf8mb4_general_ci # 禁用DNS主机名查找 skip_name_resolve = 1 # 打开文件最大数量 open_files_limit = 65535 # 自动提交 autocommit = 1 # timestamp 列如果没有显式定义为 null explicit_defaults_for_timestamp = 1
根据自己的需求可以修改配置文件,将上面的配置文件 cp 到 /etc/my.cnf
注意⚠️:配置文件是非常重要的一步!
8. 根据配置文件启动 MySQL:
./mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
启动完成后接下来需要验证,我们就登陆到实例里测试一下
9. 去 error log 里面查询 root 用户的密码:
grep "password" /data/mysql57/logs/error.log
[root@db01 bin]# grep "password" /data/mysql57/logs/error.log 2020-11-24T18:04:51.402334+08:00 1 [Note] A temporary password is generated for root@localhost: I*0ypI1=j>#G
10. 尝试登陆到 MySQL 实例:
/usr/local/mysql/bin/mysql -uroot -p'I*0ypI1=j>#G' -S /data/mysql57/data/mysql.sock
[root@db01 bin]# /usr/local/mysql/bin/mysql -uroot -p'I*0ypI1=j>#G' -S /data/mysql57/data/mysql.sock mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.29-log Copyright (c) 2000, 2020, 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. root@mysql 18:32: [(none)]>
MySQL 已经安装完成了,解析来修改 root 密码就可以使用
11. 修改 root 密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YouPassword';
12. 添加环境变量
-- 如果安装目录不在 /usr/local/mysql 先建一个软连接 -- ln -s /安装目录 /usr/local/mysql export PATH=$PATH:/usr/local/mysql/bin/ echo 'PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
13. 验证:
[root@db01 /]# mysql mysql mysql_embedded mysqladmin mysqlimport mysqlbinlog mysql_install_db mysqlcheck mysql_plugin mysql_client_test_embedded mysqlpump mysql_config mysql_secure_installation mysql_config_editor mysqlshow mysqld mysqlslap mysqld-debug mysql_ssl_rsa_setup mysqld_multi mysqltest_embedded mysqld_safe mysql_tzinfo_to_sql mysqldump mysql_upgrade mysqldumpslow mysqlxtest [root@db01 /]#
14. 注意事项:
因为由于 MySQL 版本差异,在部署过程中按照此流程可能会出现初始化失败,MySQL 无法启动,可能因为 MySQL 没有创建 error.log 按照启动报错创建 error.log 然后清空 /data 目录,重新初始化即可。