Centos7 上安装mysql遇上的问题:mysql无法正常启动

本文记录了在CentOS上安装MySQL过程中遇到的问题及解决办法,包括安装mysql-server时遇到的错误、服务启动失败的原因及如何通过配置my.cnf文件解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次在Centos上安装mysql遇到的一些问题。

第一步就遇到问题,安装mysql-server报错没有可用包


【解决方法】
先要安装mysql

# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 
# rpm -ivh mysql-community-release-el7-5.noarch.rpm

之后再安装mysql-server

# yum -y install mysql-server

然后systemctl enable mysqld设置mysql自启动 之后systemctl start mysqld这时候出问题了,运行之后一直卡着没有反应,如下

[root@localhost ~]# systemctl start mysqld
Redirecting to /bin/systemctl start mysql.service

systemctl status mysqld查看mysql服务的状态如下

 [root@localhost sbin]# systemctl status mysqld
● mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: activating (start-post) since 一 2017-05-15 17:04:12 CST; 5min ago
  Process: 981 ExecStart=/usr/bin/mysqld_safe --basedir=/usr (code=exited, status=0/SUCCESS)
  Process: 938 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 981 (code=exited, status=0/SUCCESS);         : 982 (mysql-systemd-s)
   CGroup: /system.slice/mysqld.service
           └─control
             ├─ 982 /bin/bash /usr/bin/mysql-systemd-start post
             └─2315 sleep 1

515 17:04:12 localhost.localdomain systemd[1]: Starting MySQL Community Server...
515 17:04:15 localhost.localdomain mysqld_safe[981]: 170515 17:04:15 mysqld_safe Logging to '/var/lo...g'.
515 17:04:15 localhost.localdomain mysqld_safe[981]: 170515 17:04:15 mysqld_safe Starting mysqld dae...sql
Hint: Some lines were ellipsized, use -l to show in full.

看不出问题,查看mysql的日志终于找到问题vim /var/log/mysqld.log

2017-05-14 16:40:16 0 [Note] Binlog end
170514 16:40:16 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
170515 17:04:15 mysqld_safe Logging to '/var/log/mysqld.log'.
170515 17:04:15 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2017-05-15 17:04:18 0 [ERROR] /usr/sbin/mysqld: ambiguous option '--character-set=utf8' (character-set-client-handshake, character_sets_dir)
2017-05-15 17:04:18 0 [ERROR] Aborting

原来是my.cnf文件中设置默认字符编码我写成character-set=ut8而centos7版本中应该设置为default-character-set=utf8

之后继续启动mysql仍然无法启动,查看日志如下

2017-05-15 17:14:21 1195 [Warning] Buffered warning: Changed limits: table_open_cache: 431 (requested 2000)

2017-05-15 17:14:21 1195 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist
2017-05-15 17:14:21 1195 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2017-05-15 17:14:21 1195 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-05-15 17:14:21 1195 [Note] InnoDB: The InnoDB memory heap is disabled
2017-05-15 17:14:21 1195 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-05-15 17:14:21 1195 [Note] InnoDB: Memory barrier is not used
2017-05-15 17:14:21 1195 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-05-15 17:14:21 1195 [Note] InnoDB: Using Linux native AIO
2017-05-15 17:14:21 1195 [Note] InnoDB: Not using CPU crc32 instructions
2017-05-15 17:14:21 1195 [Note] InnoDB: Initializing buffer pool, size = 128.0M
170515 17:04:18 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

注意ERROR
Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
【解决方法】
在运行初始化权限表的时候使用增加参数–datadir
mysql_install_db –user=mysql –datadir=/usr/local/mysql/var
百度后

安装完mysql server时,一般要执行这个脚本对数据库初始化。 运行这个脚本,会初始化mysql的data目录,并且创建那些系统表。
同样也会初始化系统表空间并且关联innodb表与数据结构。
更多的相关可以点击这里查看

之后启动服务依然卡住,回看前面执行命令之后的提示

Alternatively you can run:
  /usr/bin/mysql_secure_installation

即执行MySQL安全配置向导mysql_secure_installation
安装完mysql-server 会提示可以运行mysql_secure_installation。运行mysql_secure_installation会执行几个设置:
a)为root用户设置密码
b)删除匿名账号
c)取消root用户远程登录
d)删除test库和对test库的访问权限
e)刷新授权表使修改生效
执行之后systemctl restart mysqld命令可以正常执行了

可以正常启动登录mysql

<think>我们正在处理一个离线升级MySQL的任务,从5.5升级到5.7。由于没有网络连接,我们需要预先下载好所需的安装包,并在离线环境中进行安装和升级。 根据引用[1][2][3][4]提供的离线安装和升级方法,我们可以总结出以下步骤: 注意:在开始之前,请务必备份所有数据库(使用mysqldump或其他方式)以防止数据丢失。 步骤概述: 1. 下载所需的MySQL 5.7 RPM包(在可联网的机器上下载,然后传输到离线机器)。 2. 卸载旧版本的MySQL(5.5)或者保留并升级(但跨大版本升级官方建议备份恢复方式,这里我们采用直接升级的方式需要谨慎)。 3. 安装MySQL 5.7的RPM包。 4. 初始化数据库并启动服务。 5. 运行mysql_upgrade来升级系统表。 6. 验证升级。 详细步骤: 1. 下载MySQL 5.7 RPM包(在可联网的机器上操作): - 访问MySQL官方YUM仓库:https://dev.mysql.com/downloads/repo/yum/ - 选择对应CentOS7的版本,例如:mysql57-community-release-el7-11.noarch.rpm - 下载这个RPM包,然后我们需要将其中的RPM包全部下载下来(或者直接下载MySQL 5.7的server和client等RPM包)。 但是,由于我们无法使用yum在线安装,所以需要下载所有依赖的RPM包。我们可以使用yumdownloader工具(需要安装yum-utils)来下载所有依赖。 在联网机器上: ```bash # 安装yum-utils sudo yum install -y yum-utils # 下载MySQL 5.7的仓库RPM包并安装(仅用于下载,不会安装到系统) wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm # 清除缓存并重新生成 sudo yum clean all sudo yum makecache # 创建一个目录来存储所有RPM包 mkdir mysql_rpms cd mysql_rpms # 下载MySQL 5.7 server, client等以及所有依赖 yumdownloader --resolve mysql-community-server mysql-community-client mysql-community-libs mysql-community-common ``` 将整个mysql_rpms目录复制到离线CentOS 7机器上。 2. 在离线机器上,停止现有的MySQL 5.5服务: ```bash sudo systemctl stop mysqld ``` 3. 备份数据(非常重要): ```bash # 使用mysqldump备份所有数据库 mysqldump -u root -p --all-databases > all_databases_backup.sql # 同时备份配置文件(如/etc/my.cnf)和数据库目录(/var/lib/mysql)以防万一 ``` 4. 卸载MySQL 5.5(可选,但为了避免冲突,建议卸载): ```bash sudo yum remove mysql mysql-server mysql-libs mysql-common ``` 5. 安装下载的MySQL 5.7 RPM包: ```bash cd mysql_rpms sudo rpm -ivh *.rpm ``` 6. 初始化MySQL 5.7数据库: ```bash sudo mysqld --initialize --user=mysql ``` 注意:初始化会生成一个临时密码,查看日志文件(/var/log/mysqld.log)可以找到这个密码。 7. 启动MySQL服务: ```bash sudo systemctl start mysqld ``` 8. 运行mysql_upgrade(根据引用[3]): ```bash sudo mysql_upgrade -u root -p ``` 输入root密码(初始化时生成的临时密码) 9. 修改root密码(如果需要,因为5.7有密码强度要求): ```mysql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; ``` 10. 验证版本: ```bash mysql -V ``` 注意事项: - 如果之前有自定义配置文件(如my.cnf),在升级后需要检查配置是否兼容,并适当调整。 - 升级后,一些旧的特性可能不再支持,需要调整应用程序。 引用[4]中提到,在初始化数据库时指定用户(--user=mysql),以及将mysql加入到服务并设置开机自启。我们这里使用rpm安装,服务已经配置好。 引用[5]中提到了修改root密码的SQL语句,注意在5.7中,密码字段是authentication_string,并且使用password函数加密(但注意,在5.7中,password函数可能已经不再使用,推荐使用ALTER USER语句)。 如果遇到问题,请检查MySQL的错误日志(/var/log/mysqld.log)。 由于是离线升级,步骤较为复杂,请严格按照步骤操作。 生成相关问题: 1. 如何备份MySQL数据库以确保升级安全? 2. 离线升级MySQL时如何处理依赖问题? 3. MySQL 5.7初始化后如何获取临时密码? 4. 升级后如何恢复原有的MySQL配置? 5. 升级MySQL后如何验证数据完整性?</think>### CentOS 7 离线升级 MySQL 5.5 到 5.7 完整指南 以下步骤基于引用[1][2][3][4]的离线升级方案,结合最佳实践整理: --- ### 一、准备工作 1. **下载离线包**(在联网机器操作) - 下载 MySQL 5.7 RPM 包合集(含依赖): ```bash wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar ``` - 传输到离线服务器(如通过 U 盘或 SCP) 2. **备份关键数据** ```bash # 备份数据库 mysqldump -u root -p --all-databases > /opt/mysql_all_backup.sql # 备份配置文件 cp /etc/my.cnf /opt/my.cnf.bak ``` 3. **停止 MySQL 服务** ```bash systemctl stop mysqld ``` --- ### 二、卸载旧版本 MySQL 5.5 ```bash # 查看已安装包 rpm -qa | grep mysql # 卸载旧版(示例) rpm -e mysql55-libs-5.5.68-1.el7.x86_64 mysql55-server-5.5.68-1.el7.x86_64 ``` --- ### 三、安装 MySQL 5.7 1. **解压并安装 RPM 包** ```bash tar -xvf mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-5.7*.rpm \ mysql-community-libs-5.7*.rpm \ mysql-community-client-5.7*.rpm \ mysql-community-server-5.7*.rpm ``` 2. **初始化数据库** ```bash mysqld --initialize --user=mysql # 生成临时密码在 /var/log/mysqld.log chown -R mysql:mysql /var/lib/mysql ``` 3. **启动服务** ```bash systemctl start mysqld systemctl enable mysqld ``` --- ### 四、升级系统表与配置 1. **升级系统表** ```bash mysql_upgrade -u root -p # 输入日志中的临时密码 ``` 2. **重置 root 密码** ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword!'; FLUSH PRIVILEGES; ``` > 引用[5]:密码策略需包含大小写字母、数字和符号,例如 `'yungoal001!'`[^5] 3. **恢复原配置(可选)** ```bash cp /opt/my.cnf.bak /etc/my.cnf systemctl restart mysqld ``` --- ### 五、验证升级 ```bash mysql -V # 输出应包含 "mysql Ver 14.14 Distrib 5.7.39" mysql -u root -p -e "SHOW VARIABLES LIKE 'version';" ``` --- ### 关键注意事项 1. **数据安全** - 跨版本升级(5.5→5.7)**强烈建议使用 mysqldump 备份恢复**而非直接升级[^2] - 如遇启动失败,检查日志:`tail -100 /var/log/mysqld.log` 2. **依赖冲突解决** - 若安装时报依赖错误,使用 `--nodeps` 强制安装(慎用): ```bash rpm -ivh *.rpm --nodeps --force ``` 3. **SELinux 问题** - 如遇权限错误,临时禁用 SELinux: ```bash setenforce 0 # 或修改 /etc/selinux/config ``` > **引用总结**:离线升级的核心是预先下载完整 RPM 包并处理依赖[^1],跨版本升级需谨慎操作[^2][^4],密码策略遵循 MySQL 5.7 新规范[^5]。 --- ### 相关问题 1. 如何验证 MySQL 升级后的数据完整性? 2. 离线升级中遇到 RPM 依赖冲突如何解决? 3. MySQL 5.7 的密码策略有哪些强制要求? 4. 升级后如何优化 MySQL 5.7 的性能配置? 5. 如何回滚失败的 MySQL 升级操作?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值