大家好,我是老易。在Linux环境下安装MySQL,对于很多刚入门的小伙伴来说,可能是一道不小的坎——路径规划不合理、权限配置出错、初始化失败……每一步都可能让人抓狂。网上教程虽多,但要么过于简略,要么环境对不上,照着做往往还是踩坑。今天这篇文章,是我基于多年实战经验整理的一份 “保姆级”二进制安装MySQL 5.7.20全记录。从硬件准备、LVM磁盘规划,到系统参数调优、my.cnf详解,再到最后的远程连接与问题排查,每一步都有命令、有注释、有避坑提示。哪怕你是第一次接触Linux,只要跟着敲,也能成功跑起MySQL!如果你在安装过程中遇到任何问题,或者有更好的实践经验,欢迎在评论区留言,我们一起交流,让后来的人少走弯路。/mysql/app/mysql | ||
/mysql/data | ||
/mysql/log | ||
/mysql/backup |
[root@asmorcl ~]# pvcreate /dev/sdb /dev/sdc[root@asmorcl ~]# vgcreate vgmysql /dev/sdb /dev/sdc[root@asmorcl ~]# lvcreate -n lvmysql -L 200G vgmysqlpvs 或者 pvdisplayvgs 或者 vgdisplaylvs 或者 lvdisplay[root@asmorcl ~]# mkfs.ext4 /dev/vgmysql/lvmysqlmkdir /mysql[root@asmorcl ~]# mount /dev/vgmysql/lvmysql /mysql编辑 /etc/fstab,增加:
/dev/vgmysql/lvmysql /mysql ext4 defaults 0 0LV扩容
# lv空间加1g[root@asmorcl ~]# lvextend -L +1g /dev/vgmysql/lvmysql # lv空间加到30g[root@asmorcl ~]# lvextend -L 30g /dev/vgmysql/lvmysql # vg扩容[root@asmorcl ~]# pvcreate /dev/sdn[root@asmorcl ~]# vgcreate backvg /dev/sdnLV缩容
[root@asmorcl ~]# lvreduce -L -2G /dev/vgback/lvback[root@asmorcl ~]# lvremove /dev/backvg/backlv[root@asmorcl ~]# vgremove backvg[root@asmorcl ~]# pvremove /dev/sdpecho "192.168.101.68 lmysql ">>/etc/hostscat /etc/hostsexport LANG=en_US >>~/.bash_profilegroupadd mysqluseradd –r –g mysql –s /bin/false mysql [root@lmysql ~]# mkdir -p /mysql/data/3306/data[root@lmysql ~]# mkdir -p /mysql/log/3306[root@lmysql ~]# mkdir -p /mysql/app[root@lmysql ~]# mkdir -p /mysql/backup编辑 /etc/security/limits.conf,增加如下内容:
* soft nproc 16384* hard nproc 16384* soft nofile 16384* hard nofile 65536* soft stack 10240* hard stack 32768echo "* - nproc 16384 " > /etc/security/limits.d/90-nproc.conf编辑 /etc/selinux/config,将:
SELINUX=enabled改为:
SELINUX=disabled立即生效:
setenforce 0systemctl stop firewalld.servicesystemctl disable firewalld.servicesystemctl status firewalld.serviceecho "session required pam_limits.so" >> /etc/pam.d/loginmount /dev/cdrom /mntcd /etc/yum.repos.drm *.repovi o2cfs.repo增加如下内容:
[EL]name=o2cfsbaseurl=file:///mntgpgcheck=0enabled=1rpm –qa|grep mysqlrpm –e <包名>rpm –qa|grep mariadbrpm –e <包名># 强制删除[root@linux7 yum.repos.d]# rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodepsfind / -name mysql# 删除相关文件rm -rf ...cd /mysql/apptar –zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gzln –s mysql-5.7.20-linux-glibc2.12-x86_64 mysql编辑 ~/.bash_profile:
PATH=$PATH:/mysql/app/mysql/bin:$HOME/binexport PATH查看版本:
mysql –versionwhich mysqlchown –R mysql:mysql /mysqlchmod –R 775 /mysql默认读取参数位置:/etc/my.cnf
创建配置文件 /mysql/data/3306/my.cnf,内容如下:
[client]port=3306socket=/mysql/data/3306/mysql.sock[mysql]no-beepprompt="\u@mysqldb \R:\m:\s [\d]> "#no-auto-rehashauto-rehashdefault-character-set=utf8[mysqld]########basic settings########server-id=3306port=3306user = mysqlbind_address = 0.0.0.0basedir=/mysql/app/mysqldatadir=/mysql/data/3306/data#tmpdir="E:\\MySQL\\tmp"socket=/mysql/data/3306/mysql.sockpid-file =/mysql/data/3306/mysql.pidcharacter-set-server=utf8skip-character-set-client-handshake=1autocommit = 0#skip_name_resolve = 1federatedmax_connections = 800max_connect_errors = 1000default-storage-engine=INNODBtransaction_isolation = READ-COMMITTEDexplicit_defaults_for_timestamp=1sort_buffer_size = 32Mjoin_buffer_size = 128Mtmp_table_size = 72Mmax_allowed_packet = 16Msql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"interactive_timeout = 1800wait_timeout = 1800read_buffer_size = 16Mread_rnd_buffer_size = 32Mquery_cache_type = 1query_cache_size=1Mtable_open_cache=2000thread_cache_size=768key_buffer_size=32Mread_buffer_size=8Mread_rnd_buffer_size=4Mback_log=1024#flush_time=0open_files_limit=65536table_definition_cache=1400#binlog_row_event_max_size=8K#sync_master_info=10000#sync_relay_log=10000#sync_relay_log_info=10000########log settings########log-output=FILEgeneral-log=0general_log_file=/mysql/log/3306/all-general.errslow-query-log=ONslow_query_log_file=/mysql/log/3306/slow-query.errlong_query_time=10log-error=/mysql/log/3306/log-error.errlog_queries_not_using_indexes = 1log_slow_admin_statements = 1log_slow_slave_statements = 1log_throttle_queries_not_using_indexes = 10expire_logs_days = 90min_examined_row_limit = 100########replication settings##########master_info_repository = TABLE#relay_log_info_repository = TABLE#log_bin = bin.log#sync_binlog = 1#gtid_mode = on#enforce_gtid_consistency = 1#log_slave_updates#binlog_format = row#relay_log = relay.log#relay_log_recovery = 1#binlog_gtid_simple_recovery = 1#slave_skip_errors = ddl_exist_errors########innodb settings########## 根据您的服务器IOPS能力适当调整# 一般配普通SSD盘的话,可以调整到 10000 - 20000# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000innodb_io_capacity = 4000innodb_io_capacity_max = 8000innodb_buffer_pool_size = 5000Minnodb_buffer_pool_instances = 8innodb_buffer_pool_load_at_startup = 1innodb_buffer_pool_dump_at_shutdown = 1innodb_lru_scan_depth = 2000innodb_lock_wait_timeout = 5#innodb_flush_method = O_DIRECTinnodb_log_file_size = 200Minnodb_log_files_in_group = 2innodb_log_buffer_size = 16Minnodb_undo_logs = 128innodb_undo_tablespaces = 3innodb_undo_log_truncate = 1innodb_max_undo_log_size = 2Ginnodb_flush_neighbors = 1innodb_purge_threads = 4innodb_large_prefix = 1innodb_thread_concurrency = 64innodb_print_all_deadlocks = 1innodb_strict_mode = 1innodb_sort_buffer_size = 64Minnodb_flush_log_at_trx_commit=1innodb_autoextend_increment=64innodb_concurrency_tickets=5000innodb_old_blocks_time=1000innodb_open_files=65536innodb_stats_on_metadata=0innodb_file_per_table=1innodb_checksum_algorithm=0innodb_data_file_path=ibdata1:200M;ibdata2:200M;ibdata3:200M:autoextend:max:5G#生产环境建议2个1G,最后再弄个自动扩展5G,根据自己的事物对定。innodb_temp_data_file_path = ibtmp1:200M:autoextend:max:20Ginnodb_buffer_pool_dump_pct = 40innodb_page_cleaners = 4innodb_purge_rseg_truncate_frequency = 128binlog_gtid_simple_recovery=1log_timestamps=system#transaction_write_set_extraction=MURMUR32show_compatibility_56=on[root@lmysql 3306]# mysqld --defaults-file=/mysql/data/3306/my.cnf --initialize --user=mysql --basedir=/mysql/app/mysql --datadir=/mysql/data/3306/datamysql_ssl_rsa_setup --user=mysql --basedir=/mysql/app/mysql --datadir=/mysql/data/3306/datacd /mysql/app/mysql/support-filescp mysql.server mysqlvi mysql修改以下内容:
basedir=/mysql/app/mysqldatadir=/mysql/data/3306/datamysqld_pid_file_path=/mysql/data/3306/mysql.pidbindir=/mysql/app/mysql/binsbindir=/mysql/app/mysql/sbinlibexecdir=/mysql/app/mysql/bin并在文件中找到启动命令位置,确保使用正确的配置文件,例如:
$bindir/mysqld_safe --defaults-file=/mysql/data/3306/my.cnf --datadir="$datadir"方式一:
cp mysql /etc/init.d/service mysql startservice mysql stop方式二:
mysqld_safe --defaults-file=/mysql/data/3306/my.cnf或者创建启动脚本 mysql_start:
vi mysql_start# 内容:mysqld_safe --defaults-file=/mysql/data/3306/my.cnfchmod 775 mysql_start./mysql_startln -sf /mysql/data/3306/mysql.sock /tmp/mysqladmin -uroot -p123456 shutdown -S /mysql/data/3306/mysql.sock# 或者./mysql stop./mysql status# 或者ps –ef|grep mysqlcd /mysql/app/mysql/support-filescp mysql /etc/init.d/service mysql startservice mysql stop(此处可能为图形界面步骤,略)
(略)
(略)
use mysql;update user set host='%' where user='root';flush privileges;(略)
(已在前文描述)
mysql -uroot -p -S /mysql/data/3306/mysql.sockshow databases;use mysql;-- 方式一:update user set authentication_string=password("1234567") where user='root';-- 方式二:set password=password('123456');flush privileges;grant all privileges on *.* to 'root'@'%' identified by '123456';flush privileges;编辑 /mysql/data/3306/my.cnf,在 [mysqld] 段增加:
skip-grant-tables然后重启mysql,即可无密码登录,之后再注释掉该行并重启。
use mysql;update user set password_expired='N' where user='root';flush privileges;rm –rf /mysql/app/*rm –rf /mysql/data/*rm –rf /mysql/log/*rm –rf /etc/init.d/mysqlid mysqluserdel mysqlgroupdel mysql至此,MySQL 5.7.20已经成功安装在你的Linux服务器上,并且完成了基础的安全配置和调优。你可以用它来支撑你的业务,或者作为学习数据库管理的实验环境。这篇文章几乎涵盖了二进制安装的全流程,但实际生产环境可能还有更多细节(比如主从复制、性能压测、备份策略等),这些我会在后续的文章中陆续推出。如果你觉得本文对你有帮助,别忘了点个“在看”并分享给身边需要的小伙伴,也欢迎关注我的公众号 [老易学DB],第一时间获取最新技术干货。最后想问问大家:你在安装MySQL时遇到过最诡异的报错是什么?后来怎么解决的?来评论区晒出你的“踩坑经验”,我们一起给新手们“排雷”!👇我们下期见!