MySQL安装配置教程:超详细图文教程(附MySQL安装包)

MySQL安装配置教程:超详细图文教程(附MySQL安装包) 安装MySQL的方式有很多种但二进制安装凭借“解压即用”的特点成为生产环境中最推荐的部署方式。本文基于实际运维经验从目录规范、用户创建到配置文件优化完整记录MySQL 5.7二进制安装的全过程并总结了6类常见启动失败案例及解决方案。还在为源码编译安装MySQL头疼吗二进制版本安装不仅快速而且稳定可靠。本文将手把手教你如何在Linux系统以CentOS 7为例上安装MySQL 5.7的二进制版本图文详解。适用人群运维工程师、后端开发、云服务器使用者、Linux初学者前置要求一台CentOS 7服务器如果还没有可以参考我前面的文章VMware安装centos教程https://blog.csdn.net/weixin_41558294/article/details/162388432一、MySQL安装规范MySQL安装方式二进制安装源码编译安装、yum 、rpmMySQL运行用户mysql:mysql 注意该用户是虚拟用户只是用于mysql进程运行使用不允许登录、不创建家目录 切换到root用户useradd-s/sbin/nologin-MmysqlMySQL目录规范下载目录 /server/tools 系统目录 /opt/mysql/mysql-xx.xx 软连接ln-s/opt/mysql/mysql-xx.xx /usr/local/mysql 数据目录 /data/mysql/mysqlport/{data,logs}配置文件 /data/mysql/mysqlport/myport.cnf确定libc版本2.12小于2.12会有报错[roottest ~]# ldd --versionldd(GNU libc)2.17Copyright(C)2012Free Software Foundation, Inc. This isfreesoftware;see thesourceforcopying conditions. There is NO warranty;not evenforMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 由 Roland McGrath 和 Ulrich Drepper 编写。MySQL下载通过网盘分享的文件mysql-5.7.44-linux-glibc2.12-x86_64 链接: https://pan.baidu.com/s/12f0rVP1qfbhNLphWAw-Hww?pwdtkp5 提取码: tkp5 --来自百度网盘的分享二、二进制安装MySQL1. 创建MySQL虚拟用户useradd-s/sbin/nologin-Mmysql2. 创建MySQL目录mkdir-p/server/toolsmkdir-p/opt/mysqlmkdir-p/data/mysql/mysql3306/{data,logs}cd/server/tools3. 上传MySQL二进制包rz如果没有这个工具安装 yum install -y lrzsz4. 解压MySQL二进制包tarxf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz5. 将软件部分移动到指定目录mvmysql-5.7.44-linux-glibc2.12-x86_64 /opt/mysql/mysql-5.7.446. 创建软连接ln-s/opt/mysql/mysql-5.7.44/ /usr/local/mysql7. 删除mariadbrpm-e--nodepsmariadb-libs8. 配置文件整理编辑/data/mysql/mysql3306/my3306.cnf[mysqld] usermysql basedir/usr/local/mysql datadir/data/mysql/mysql3306/data socket /data/mysql/mysql3306/mysql.sock server_id 1 port 3306 log_error/data/mysql/mysql3306/logs/error.log log_bin/data/mysql/mysql3306/logs/mysql-bin binlog_formatrow gtid_modeon enforce_gtid_consistencytrue log_slave_updates1 max_connections1024 wait_timeout60 sort_buffer_size2M max_allowed_packet32M join_buffer_size2M innodb_buffer_pool_size128M innodb_flush_log_at_trx_commit1 innodb_log_buffer_size32M innodb_log_file_size128M innodb_log_files_in_group2 binlog_cache_size2M max_binlog_cache_size8M max_binlog_size512M expire_logs_days7 slow_query_logon slow_query_log_file/data/mysql/mysql3306/logs/slow.log long_query_time0.5 log_queries_not_using_indexes19. 安装MySQL依赖包 yum install libaio-devel -y yum install numactl -y 10. 更改MySQL相关目录的用户组 chown -R mysql:mysql /data/* 11. 初始化MySQL数据库 /usr/local/mysql/bin/mysqld --defaults-file/data/mysql/mysql3306/my3306.cnf --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/data/mysql/mysql3306/data 12. 加入环境变量编辑 vim /etc/profile PATH/usr/local/mysql/bin:$PATH source /etc/profile 13. 启动MySQL mysqld --defaults-file/data/mysql/mysql3306/my3306.cnf 14. 查看是否启动成功 netstat -lntup |grep mysql 15. MySQL8.0安装教程Linux安装MySQL 8.0教程https://blog.csdn.net/weixin_41558294/article/details/162642562Windows安装MySQL 8.0教程https://blog.csdn.net/weixin_41558294/article/details/162705242三、首次登录MySQL与MySQL密码修改3.1 无密码登录# 本地登录mysql-uroot-p-S/data/mysql/mysql3306/mysql.sock3.2 修改root密码# MySQL 5.7中password字段已改为authentication_stringALTERUSERrootlocalhostIDENTIFIED BYyour_new_password;3.3 清理无用用户DELETE FROM mysql.user WHERE user!root;四、MySQL启动失败常见问题与排查4.1 MySQL目录权限问题错误信息[ERROR] Could not open file /data/mysql/mysql3306/logs/error.log for error logging: Permission denied原因数据目录的所有者不是mysql用户解决chown-Rmysql:mysql /data/mysql4.2 MySQL配置文件参数错误错误信息[ERROR] unknown variable xxx原因参数拼写错误或该版本不支持该参数解决检查配置文件修正错误参数4.3 MySQL配置文件未正确加载解决启动时必须通过--defaults-file指定配置文件mysqld--verbose--help|grepdefaults4.4 MySQL端口被占用错误信息[ERROR] Do you already have another mysqld server running on port: 3306?解决# 查找占用端口的进程netstat-lntup|grep3306# 修改配置文件中的端口或停止冲突的服务4.5 MySQL二进制日志文件丢失错误信息[ERROR] Failed to open log (file .../mysql-bin.000014, errno 2)解决编辑mysql-bin.index文件删除对应的日志记录4.6 MySQL共享表空间大小不匹配错误信息[ERROR] InnoDB: The Auto-extending innodb_system data file ./ibdata1 is of a different size解决在初始化前设置innodb_data_file_pathibdata1:12M:autoextend或删除data目录重新初始化4.7 MySQL配置文件隐形字符问题有时启动失败是因为配置文件中存在看不见的字符如Windows编辑器的换行符、BOM头等。解决使用dos2unix工具转换格式或用vim的:set ffunix修复。4.8 MySQL启动失败排查方法确认版本和启动方式明确当前MySQL版本及启动命令查看错误日志tail -100 /data/mysql/mysql3306/logs/error.log检查配置文件mysqld --defaults-filexxx --verbose --help检查系统资源磁盘空间、内存、端口等五、连接MySQL数据库的方式本地连接通过socketmysql-uroot-p-S/data/mysql/mysql3306/mysql.sock远程连接通过TCP/IPmysql-uroot-p-P3306-h192.168.58.51六、MySQL安全加固建议使用非root用户运行已通过mysql:mysql用户实现设置强密码避免使用默认或简单密码删除匿名用户DELETE FROM mysql.user WHERE User;限制远程root登录仅允许localhost登录定期备份配合二进制日志实现增量备份启用慢查询日志便于性能分析和优化七、常用MySQL管理命令-- 创建数据库CREATEDATABASEmydbCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 创建用户并授权CREATEUSERappuserlocalhostIDENTIFIEDBYpassword;GRANTALLPRIVILEGESONmydb.*TOappuserlocalhost;-- 查看数据库状态SHOWSTATUSLIKEThreads_connected;SHOWPROCESSLIST;-- 导入SQL文件SOURCE/path/to/backup.sql;八、MySQL常用命令与基础操作8.1 MySQL数据库登录# 本地登录通过socketmysql-uroot-p-S/data/mysql/mysql3306/mysql.sock# 远程登录mysql-uroot-p-P3306-h192.168.58.51-u指定用户名-p提示输入密码-h指定主机IP地址-P指定端口8.2 MySQL数据库基础操作DDL查看与切换数据库-- 查看所有数据库SHOWDATABASES;-- 使用切换数据库USE数据库名;-- 查看当前使用的数据库SELECTDATABASE();创建与删除数据库-- 创建数据库指定字符集CREATEDATABASE数据库名CHARSETutf8mb4;-- 删除数据库DROPDATABASE数据库名;8.3 MySQL表的基础操作查看与删除表-- 显示当前数据库所有表SHOWTABLES;-- 删除表DROPTABLE表名;创建表CREATETABLE表名(列名 类型 约束1约束2,列名 类型 约束);示例CREATETABLEemp(enameVARCHAR(10),hiredateDATE,salDECIMAL(10,2),deptnoINT(2));查看表结构-- 查看表定义DESC表名;-- 查看详细表定义含创建语句SHOWCREATETABLE表名 \G;修改表结构-- 修改字段类型ALTERTABLEempMODIFYenameVARCHAR(20);-- 添加字段ALTERTABLEempADDCOLUMNageINT(3);-- 删除字段ALTERTABLEempDROPCOLUMNage;-- 字段改名ALTERTABLEemp CHANGE age age1INT(4);-- 修改表名ALTERTABLEempRENAMEemp1;8.4 MySQL数据操纵语句DML插入数据-- 指定字段插入INSERTINTOemp(ename,hiredate,sal,deptno)VALUES(zhangsan,2018-01-01,2000,1);-- 不指定字段按顺序全部插入INSERTINTOempVALUES(lisi,2018-01-01,2000,1);-- 批量插入INSERTINTOdeptVALUES(1,dept1),(2,dept2);更新与删除数据-- 修改记录UPDATEempSETsal4000,deptno2WHEREenamezhangsan;-- 删除记录DELETEFROMempWHEREenamezhangsan;查询数据-- 查询所有记录SELECT*FROMemp;-- 查询不重复的记录SELECTDISTINCTdeptnoFROMemp;-- 条件查询SELECT*FROMempWHEREdeptno1ANDsal3000;-- 排序和限制取前2条SELECT*FROMempORDERBYdeptnoDESCLIMIT2;-- 分页查询从第0条开始取10条SELECT*FROMempORDERBYdeptnoDESCLIMIT0,10;8.5 MySQL字段约束约束类型关键字说明主键约束PRIMARY KEY唯一标识每一行不能为NULL唯一约束UNIQUE列中所有值唯一非空约束NOT NULL列不能为空默认约束DEFAULT未提供值时使用默认值自动递增AUTO_INCREMENT自动生成唯一值外键约束FOREIGN KEY建立和维护表间关系8.6 MySQL系统变量管理查询变量-- 查询会话变量默认SHOWVARIABLESLIKE%read_only%;SHOWVARIABLESLIKE%chara%;-- 查询全局变量SHOWGLOBALVARIABLESLIKE%read_only%;修改变量-- 修改全局变量影响后续新连接重启失效SETGLOBALcharacter_set_clientutf8;-- 修改会话变量仅影响当前会话SETcharacter_set_clientgbk;查询状态变量用于监控和性能分析SHOWSESSIONSTATUSLIKE%Table_locks_immediate%;九、MySQL用户与权限管理9.1 创建用户-- 方式一使用CREATE USERCREATEUSER用户名主机IDENTIFIEDBY密码;-- 示例CREATEUSERtest1localhostIDENTIFIEDBYabc123;⚠️注意MySQL的账号由“用户名”和“登录主机”共同构成两者组合才是一个完整账号。9.2 授权管理-- 授予权限GRANT权限ON数据库.表TO用户主机IDENTIFIEDBY密码;-- 示例授予test数据库的所有权限GRANTALLONtest.*TOuser1%IDENTIFIEDBY123456;-- 查看用户权限SHOWGRANTSFORuserlocalhost;-- 撤销权限REVOKE权限ON数据库.表FROM用户主机;-- 示例撤销update权限REVOKEUPDATEON*.*FROMlisilocalhost;9.3 查看与删除用户-- 查看所有用户SELECTuser,authentication_string,hostFROMmysql.user;-- 删除用户DROPUSERuserhost;-- 重命名用户RENAMEUSERold_userhostTOnew_userhost;9.4 修改密码-- 修改当前登录用户密码SETPASSWORDPASSWORD(新密码);-- 修改其他用户密码SETPASSWORDFORuserhostPASSWORD(新密码);9.5 MySQL忘记root密码的解决办法# 1. 停止MySQL服务systemctl stop mysqld.service# 2. 在配置文件/etc/my.cnf的[mysqld]下添加skip-grant-tables# 3. 重启MySQL无密码登录后修改密码UPDATE mysql.user SET authentication_stringPASSWORD(新密码)WHEREuserroot;# 4. 删除配置文件中skip-grant-tables参数重启MySQL十、MySQL备份与恢复10.1 mysqldump全量备份mysqldump是MySQL自带的逻辑备份工具通过生成SQL脚本来备份数据库。备份单个数据库mysqldump-u用户名-p数据库名备份文件.sql# 示例mysqldump-uroot-pmydbmydb_backup.sql备份所有数据库mysqldump-uroot-p--all-databasesall_databases_backup.sql备份特定表mysqldump-uroot-p数据库名 表名表备份.sql# 示例mysqldump-uroot-pmydbusersusers_backup.sql备份时加常用选项mysqldump --all-databases --master-data2--single-transaction\--routines--events--triggersall_databases.sql10.2 数据恢复还原到指定数据库mysql-u用户名-p数据库名备份文件.sql# 示例mysql-uroot-pmydbmydb_backup.sql创建新数据库并恢复# 先创建数据库mysql-uroot-p-eCREATE DATABASE newdb;# 再恢复数据mysql-uroot-pnewdbmydb_backup.sql恢复所有数据库mysql-uroot-pall_databases_backup.sql10.3 备份注意事项备份频率根据业务需求确定重要数据建议定期备份备份文件存储存放在安全位置建议加密和访问控制测试恢复定期测试备份文件的有效性性能影响大规模备份建议在低峰时段进行备份和恢复过程中确保MySQL服务正在运行十一、MySQL性能优化11.1 核心性能参数连接管理参数参数说明建议值max_connections最大并发连接数并发用户数的1.2-1.5倍thread_cache_size线程缓存数量根据Threads_created指标调整内存配置参数参数说明建议值innodb_buffer_pool_sizeInnoDB核心缓存区物理内存的50%-70%key_buffer_sizeMyISAM索引缓存InnoDB为主时保持默认8MB日志配置参数参数说明建议值slow_query_log开启慢查询日志生产环境开启long_query_time慢查询阈值0.5-2秒innodb_log_file_size重做日志大小innodb_buffer_pool_size / 411.2 性能监控指标QPS/TPS每秒查询数/事务数反映系统吞吐量连接使用率Threads_connected / max_connections缓存命中率InnoDB缓冲池命中率应 99%锁等待时间Innodb_row_lock_waits值过高需优化事务11.3 诊断与调优工具-- 查看运行状态SHOWGLOBALSTATUSLIKEThreads%;-- 查看InnoDB引擎状态SHOWENGINEINNODBSTATUS\G-- 查看当前参数值SHOWVARIABLESLIKEmax_connections;-- 动态修改参数重启失效SETGLOBALmax_connections500;11.4 参数调优原则循序渐进每次只修改1-2个参数观察效果监控先行优化前建立性能基线因地制宜根据工作负载调整配置动态调整优先先在线调整观察效果再写入配置文件固化十二、MySQL主从复制配置12.1 环境准备两台服务器Master和Slave建议配置相同操作系统Linux如CentOS 7MySQL版本5.7或更高主从版本需一致确保两台服务器网络互通12.2 主库配置Master编辑配置文件/etc/my.cnf[mysqld] server-id1 log-binmysql-bin binlog-formatrow重启MySQL服务后创建复制用户CREATEUSERrepl%IDENTIFIEDBYyour_password;GRANTREPLICATIONSLAVEON*.*TOrepl%;FLUSHPRIVILEGES;获取二进制日志位置FLUSHTABLESWITHREADLOCK;SHOWMASTERSTATUS;-- 记录 File 和 Position 的值12.3 从库配置Slave编辑配置文件/etc/my.cnf[mysqld] server-id2 log-binmysql-bin binlog-formatrow relay-logmysql-relay-bin log-slave-updates1 read-only112.4 数据同步与启动复制# 在主库备份数据mysqldump --all-databases --master-data2--single-transactionall_databases.sql# 传输到从库scpall_databases.sql userslave_ip:/path/to/backup/# 在从库恢复mysql/path/to/backup/all_databases.sql配置从库并启动CHANGE MASTERTOMASTER_HOST主库IP,MASTER_USERrepl,MASTER_PASSWORD密码,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS12345;STARTSLAVE;-- 检查复制状态SHOWSLAVESTATUS\G十三、日常运维与安全加固13.1 安全加固建议使用专用用户运行使用mysql:mysql虚拟用户运行服务删除匿名用户DELETE FROM mysql.user WHERE User;删除测试数据库DROP DATABASE test;限制root远程访问仅允许localhost登录最小化权限原则按需授予用户最小必要权限禁用匿名账户确保没有空用户名的账户13.2 日志管理MySQL日志类型包括错误日志、通用查询日志、二进制日志、慢查询日志日志类型说明配置参数错误日志记录启动、停止及运行错误log_error二进制日志记录DDL、DML等变更操作log_bin慢查询日志记录超过阈值的SQLslow_query_log通用查询日志记录所有连接和查询general_log13.3 日常监控要点监控数据库连接数、CPU使用率、内存使用率、磁盘空间定期分析慢查询日志优化SQL语句监控Threads_connected与max_connections的比率关注Innodb_row_lock_waits锁等待情况13.4 多实例部署MySQL支持在一台服务器上部署多个实例每个实例通过不同的端口提供服务。各实例之间相互独立拥有各自的datadir、port、socket和pid文件。# 多实例部署时每个实例使用独立的配置文件/data/mysql/mysql3306/my3306.cnf# 实例1端口3306/data/mysql/mysql3307/my3307.cnf# 实例2端口3307通过以上步骤你应该能在CentOS 7系统上顺利完成MySQL 5.7的二进制安装与配置。二进制安装方式相比源码编译更加快速便捷同时保持了良好的可控性非常适合生产环境部署。建议在实际操作中注意以下几点严格按照目录规范组织文件便于后期维护和多实例管理初始化时根据安全需求选择--initialize-insecure或--initialize遇到启动失败时第一时间查看error.log错误日志定位问题如果在安装过程中遇到问题欢迎在评论区留言交流。