mysql8.0版本下服务无法以及启动命令行mysqld –skip-grant-tables 失效,无法登陆的问题

服务无法启动

如果在mysql的安装路径(C:\Program Files\MySQL\MySQL Server 8.0)中没有配置文件,则自己手动创建一个,文件名为:my.ini
 在my.ini 文件中 本人配置的如一下可运行选项:

# For advice on how to change settings please see
  # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
  # *** DO NOT EDIT THIS FILE. It’s a template which will be copied to the
  # *** default location during install, and will be replaced if you
  # *** upgrade to a newer version of MySQL.
  [client]
  #password = your_password
  port = 3306
  socket = /tmp/mysql.sock
  default-character-set=utf-8
  [mysqld]
  port = 3306
  basedir=“C:/Program Files/Mysql”
  # 设置mysql的安装目录
  datadir=“C:/Program Files/Mysql/data”
  # 设置mysql数据库的数据的存放目录,必须是data,或者是//xxx/data
  default-storage-engine=INNODB
  # 创建新表时将使用的默认存储引擎
  socket = /tmp/mysql.sock
  sql-mode=“STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
  # SQL模式为strict模式
  #default-character-set=utf-8
  # 设置mysql服务器的字符集
  #character-set-server=utf-8
  # 服务端使用的字符集默认为8比特编码的latin1字符集
  max_connections=100
  # mysql服务器支持的最大并发连接数(用户数)。但总会预留其中的一个连接给管理员使用超级权限登录,即使连接数目达到最大限制。如果设置得过小而用户比较多,会经常出现“Too many connections”错误。
  query_cache_size=0
  # 查询缓存大小,用于缓存SELECT查询结果。如果有许多返回相同查询结果的SELECT查询,并且很少改变表,可以设置query_cache_size大于0,可以极大改善查询效率。而如果表数据频繁变化,就不要使用这个,会适得其反
  #table_cache=256
  # 这个参数在5.1.3之后的版本中叫做table_open_cache,用于设置table高速缓存的数量。由于每个客户端连接都会至少访问一个表,因此此参数的值与 max_connections有关。当某一连接访问一个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表已加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进行查询。在执行缓存操作之前,table_cache用于限制缓存表的最大数目:如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存。
  tmp_table_size=34M
  # 内存中的每个临时表允许的最大大小。如果临时表大小超过该值,临时表将自动转为基于磁盘的表(Disk Based Table)。
  thread_cache_size=8
  # 缓存的最大线程数。当客户端连接断开时,如果客户端总连接数小于该值,则处理客户端任务的线程放回缓存。在高并发情况下,如果该值设置得太小,就会有很多线程频繁创建,线程创建的开销会变大,查询效率也会下降。一般来说如果在应用端有良好的多线程处理,这个参数对性能不会有太大的提高。
  #------------------------------MyISAM相关参数 begin------------------------------------------------
  myisam_max_sort_file_size=100G
  # mysql重建索引时允许使用的临时文件最大大小
  myisam_sort_buffer_size=68M
  key_buffer_size=54M
  # Key Buffer大小,用于缓存MyISAM表的索引块。决定数据库索引处理的速度(尤其是索引读)
  read_buffer_size=64K
  # 用于对MyISAM表全表扫描时使用的缓冲区大小。针对每个线程进行分配(前提是进行了全表扫描)。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
  read_rnd_buffer_size=256K
  sort_buffer_size=256K
  # connection级参数(为每个线程配置),500个线程将消耗500*256K的sort_buffer_size。
  #------------------------------MyISAM相关参数 end------------------------------------------------
  #-------------------------------# InnoDB相关参数 begin ---------------------------------------
  innodb_additional_mem_pool_size=3M
  # InnoDB用于存储元数据信息的内存池大小,一般不需修改
  innodb_flush_log_at_trx_commit =1
  # 事务相关参数,如果值为1,则InnoDB在每次commit都会将事务日志写入磁盘(磁盘IO消耗较大),这样保证了完全的ACID特性。而如果设置为0,则表示事务日志写入内存log和内存log写入磁盘的频率都为1次/秒。如果设为2则表示事务日志在每次commit都写入内存log,但内存log写入磁盘的频率为1次/秒。
  innodb_log_buffer_size=2M
  # InnoDB日志数据缓冲大小,如果缓冲满了,就会将缓冲中的日志数据写入磁盘(flush)。由于一般至少都1秒钟会写一次磁盘,所以没必要设置过大,即使是长事务。
  innodb_buffer_pool_size=105M
  # InnoDB使用缓冲池来缓存索引和行数据。该值设置的越大,则磁盘IO越少。一般将该值设为物理内存的80%。
  innodb_log_file_size=53M
  # 每一个InnoDB事务日志的大小。一般设为innodb_buffer_pool_size的25%到100%
  innodb_thread_concurrency=9
  # InnoDB内核最大并发线程数
  #-------------------------------# InnoDB相关参数 end ---------------------------------------

注意:datadir属性后的data文件夹,一定不要自己手动创建,本人尝试手动创建会有问题,如果自己创建了可以删除掉,再执行后面的操作。

3 在mysql5.7以上版本中默认没有一个data目录,即没有初始化服务。需要先初始化mysql才可以启动服务,否则会报 “服务没有报告任何错误”,启动失败。

解决方法:

a 进入mysql的bin目录;

b 执行mysqld --initialize-insecure ,第一次执行的话,时间会久一些,执行结束后没有输出信息,查看bin的同级目录下会多出一个data文件夹,里面一堆文件。

4 再次执行net start mysql命令启动服务,发现启动成功!

命令行问题

1、管理员权限登陆cmd,不会使用管理员登陆的请搜索cmd,搜索结果右键。

2、命令行输入:net stop mysql;然后提示。服务停止中 --> 服务已停止,如出现其他错误请百度。

  这只是一个示例,请在服务中查看服务具体名称,比如我的就是mysql80。

  服务不会打开的请 win+R --> services.msc --> 回车,找到mysql开头的服务名。

3、由于mysqld –skip-grant-tables实测在mysql8.0中已失效,现使用mysqld --console --skip-grant-tables --shared-memory

4、另外开一个cmd,使用mysql直接无密登录。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 如果 mysqld-skip-grant-tables 已经失效,可以尝试以下解决方案: 1. 重启 MySQL 服务器 2. 检查 my.cnf 文件是否正确设置了 mysqld-skip-grant-tables 选项 3. 在启动 MySQL 时添加 --skip-grant-tables 参数 如果仍然无法解决问题,可以尝试重新安装或升级 MySQL。 ### 回答2: mysqld-skip-grant-tables是MySQL中一个非常重要的命令,它可以让用户在忘记MySQL密码的情况下,直接登录进入MySQL数据库,从而重置密码。但是,在使用mysqld-skip-grant-tables的时候,需要注意一些问题,毕竟这是一个非常危险的操作,不当使用可能会导致数据丢失,数据库崩溃等严重后果。 首先,如果mysqld-skip-grant-tables失效了,可能是由于MySQL版本的不兼容导致的,因为不同的MySQL版本是有差异的,如果版本不兼容,可能会导致错误。其次,可能是由于MySQL服务器中的一些配置文件被更改了,或者是权限问题导致mysqld-skip-grant-tables无法正常工作。此外,需要注意的是,当使用该命令时,要避免同时进行其他操作,否则可能会导致数据丢失或者其他问题。 在使用mysqld-skip-grant-tables时,最好遵循以下几点原则: 1. 在进行操作前,一定要备份好数据。 2. 在使用mysqld-skip-grant-tables时,只运行必须的服务,并关闭所有的MySQL二进制,否则可能会导致数据损坏。 3. 在操作的过程中,一定要小心谨慎,仔细阅读MySQL的官方文档并遵循相应的操作规范。 4. 在成功登录MySQL之后,一定要尽快修改密码,并重新打开MySQL二进制。 总之,如果mysqld-skip-grant-tables失效了,可能会导致一些无法预料的问题,所以在使用这个命令之前,一定要仔细考虑,并严格遵循相关的操作规范。 ### 回答3: mysqld-skip-grant-tables是MySQL服务的一个启动选项,在启动MySQL时加上该选项可以进入一个特殊的状态,也就是跳过授权表的检查,直接使用root用户登录MySQL,从而可以修改其他用户的密码或者创建新用户。不过需要注意的是,这个状态不安全,因为任何人都可以使用root用户登录MySQL,因此只应在必要时临时启用。 一般而言,当你需要重置某个MySQL账号的密码时,可以使用mysqld-skip-grant-tables选项进入上述状态,然后执行相应的命令进行密码的修改。当操作完成后,再将mysqld-skip-grant-tables选项关闭,MySQL就会回到正常模式,恢复正常的授权检查。 然而,有时候,在MySQL服务运行的过程中,mysqld-skip-grant-tables选项会自动失效,这就会导致授权表恢复正常的检查,使得无法使用root用户登录MySQL。这是因为MySQL自身的一些设置或运行状态导致了该选项的失效,比如重启MySQL服务、重新加载授权表等操作,都会使mysqld-skip-grant-tables失效。 如果出现这种问题,一种解决方法是重启MySQL服务,并在重启命令中再次添加mysqld-skip-grant-tables选项。不过,这种方法存在安全隐患,因为重启服务时,MySQL可能会重新加载授权表,从而导致之前的修改失效。 另一种解决方法是使用其他的 MySQL授权表管理工具,比如phpMyAdmin等,这些工具可以通过 Web 界面进行 GUI 方式的密码重置、用户创建等操作。使用这种方法需要注意,在操作前需要锁定其他用户账号以避免重置他人密码的情况发生。 总之,跳过授权表检查这种方法的风险与收益需要评估后再决定是否使用,同时操作时也需要小心谨慎,避免造成不必要的损失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值