针对 MySQL ER_GIPK_COLUMN_ALTER_NOT_ALLOWED 4110 错误,修复方法主要是在执行更改表结构或属性之前,先检查写保护列是否符合要求,确保不尝试更改由其他列依赖的写保护列。远程处理时,需确保数据库允许远程访问,检查 user 表中 host 字段是否设置为'%'或特定 IP,并执行 flush privileges 刷新权限。若连接报错,还需检查防火墙是否开放 3306 端口以及 MySQL 服务是否启动,必要时修改 my.cnf 配置文件中的 bind-address 为 0.0.0.0 以允许远程连接。
MySQL Error number: 4110; Symbol: ER_GIPK_COLUMN_ALTER_NOT_ALLOWED; SQLSTATE: HY000 报错 故障修复 远程处理 - 树叶云
MySQL Error number: 4110; Symbol: ER_GIPK_COLUMN_ALTER_NOT_ALLOWED; SQLSTATE: HY000 报错 故障修复 远程处理 文档解释 Error number: 4110; Symbol: ER_GIPK_COLUMN_ALTER_NOT_ALLOWED; SQLSTATE: HY000 Message: Altering generated invisible primary key column 'my_row_id' is not allowed. 错误说明:ER_GIPK_COLUMN_ALTER_NOT_ALLOWED 这是 MySQL 中一个常见的错误,用于指示尝试更改写保护列时发生的错误。这是一个"HY000″ SQLSTATE,这也意味着 SQL 语句出现“句法错误或不支持的函数”。这个错误的编号是 4110。常见案例 这个错误通常发生在为表的一列添加或删除写保护时,该列由其他列依赖于。此外,当尝试更改表中的列属性 (name,data type,is_nullable,table_options) 时,这个错误也可能发生。最后,当执行 CREATE TABLE 或 ALTER TABLE 命令来更改表结构时,这个错误也可能发生。解决方法:要解决这个错误,建议让用户在执行更改表结构或更改属性之前,对于写保护列首先进行检查。只要所有这些列符合要求,再执行 SQL 命令来更改表结构或表的属性。此外,要避免这个错误,建议实施正确的备份和可恢复性概念,同时在生产环境中使用 ALTER TABLE 语句之前,通过开发环境测试,尤其是添加或更改写保护列的时候。(来自 2025 年 5 月 24 日的资料)
MySQL 远程访问权限的设置
MySQL 远程访问权限的设置\n今儿有位同事提出,一套 MySQL5.6 的环境,从数据库服务器本地登录,一切正常,可是若从远程服务器访问,就会报错,ERROR 1045 (28000): Access denied for user 'bisal'@'x.x.x.x' (using password: YES) 我才开始接触 MySQL,因此每一个错误场景,都是增长经验的机会,这种错误要么是密码错误,要么是未设置远程 IP 访问权限。我们模拟下这个过程,首先,创建用户 bisal,如果密码不加引号会报错,mysql> create user bisal identified by bisal; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bisal' at line 1 创建完成,可以看出,用户 bisal 的 host 是%,不是具体某个 IP,mysql> create user bisal identified by 'bisal'; Query OK, 0 rows affected (0.00 sec) mysql> select user, password, host from user; +-------+-------------------------------------------+-----------------+ | user | password | host | +-------+-------------------------------------------+-----------------+ | bisal | *9AA096167EB7110830776F0438CEADA9A7987E31 | % |+-------+-------------------------------------------+-----------------+ 实验一:让指定 IP 访问数据库 假设数据库服务器 IP 是 x.x.x.1,授权让 x.x.x.3 用户可以访问,mysql> grant all privileges on *.* to 'bisal'@'x.x.x.3'; Query OK, 0 rows affected (0.00 sec) 此时从 x.x.x.2 上访问数据库,就会提示错误,因为仅允许 x.x.x.3 服务器,可以访问数据库,mysql -h x.x.x.1 -ubisal ERROR 1045 (28000): Access denied for user 'bisal'@'app' (using password: YES) 授权让 x.x.x.2 用户可以访问,mysql> grant all privileges on *.* to 'bisal'@'x.x.x.2' identified by 'bisal'; Query OK, 0 rows affected (0.00 sec) 此时从 x.x.x.2 上,就可以访问数据库了,mysql -h x.x.x.1 -ubisal -pbisal 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 1008 Server version: 5.6.31-log MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affilia(撰于 2026 年 4 月 12 日)
解决 Navicat 连接 MySQL 数据库报错问题
解决 Navicat 连接 MySQL 数据库报错问题\n今天在用 Navicat 连接另外一台主机上的 MySQL 时报错:Host is not allowed to connect to this MySQL server 默认安装的 mysql 无法远程连接是因为 MySQL 默认配置了不支持远程连接引起的。解决方法:一、本地主机上登录 root 用户 找到 mysql.exe 所在路径,shift+ 右键,在当前窗口打开命令行。执行命令:mysql -uroot -proot Enter password: 成功连接 mysql 以后,执行以下 sql 语句查看 user 库情况:use mysql; select host from user where user='root'; 可以看到,mysql 默认配置的 host 都是本地 IP。二、修改配置使之允许远程登录访问 执行以下 sql 语句:update user set host='%' where user='root'; Host 设置了"%"后便可以允许远程访问,但需要注意,这里表里有 3 条记录,这样更新会出错,仅成功更新一条记录。接下来,把多余的删掉,仅保留 host 值为'%'的记录即可。delete from user where user = 'root' and host <>'%';(亲测,这一步非必须) 三。刷新权限使配置生效 执行以下语句:flush privileges 结果看上图,执行成功了。下面再次测试远程连接。全部语句:代码语言:javascript AI 代码解释 mysql-u root-p/*Enter password:*********/use mysql;select host from user where user='root';update usersethost='%'where user='root';flush privileges; 错误一:如果还是连接不到,那是不是 MySQL Server 绑定了本地地址,打开 /etc/mysql/my.cnf, 找到:bind-address = 127.0.0.1 去除 IP 地址绑定,把它改为:bind-address = 0.0.0.0 然后重启 MySQL Server:/etc/init.d/mysql restart 错误二:ERROR 2003 (HY000): Can't connect to MySQL server on'hostxxxxx' (10061) 错误原因:mysqld 数据库服务没有启动。解决办法:检查:在 windows 的任务管理器,或者 unix/linux 下 ps -aux | grep mysql 看一下。确认服务已经启动。处理:启动 mysqld 服务 错误三:防火墙开启了 解决方法:防火墙需要允许 3306 端口连接。(2026 年 1 月 4 日的资料)
navicatmysql 连接不上_navicat 找不到本地 MySQL 服务
navicatmysql 连接不上_navicat 找不到本地 MySQL 服务\n最近遇到了一件非常棘手的问题,用 Navicat 远程连接数据库居然连接不到,真是头都大了。网上查阅了一下原因,原来是没有开通远程权限,好吧,下面我就来回忆一下自己怎么处理这问题的!大家都知道,用 Navicat 连接数据库一般是这样连得:问题整理以及解决办法 错误一:错误原因:本地 IP(xxx.xxx.xxx.xxx) 没有访问远程数据库的权限。于是下面开启本地 IP(xxx.xxx.xxx.xxx) 对远程 mysql 数据库的访问权限。解决办法:1.首先远程连接进入服务器,在 cmd 中输入 mysql -u root -p,然后回车,输入密码后回车进入 mysql 命令行。2.输入 use mysql; 3.输入 select user,password,host from user; 可以看到 host 中只有 localhost 主机。我们需要将 xxx.xxx.xxx.xxx 也添加到这里才对。4.添加方法如下:输入 grant all privileges on *.* to root@"xxx.xxx.xxx.xxx" identified by“密码”;(xxx.xxx.xxx.xxx 用%也行,表示所有 IP) 或者 GRANT ALL PRIVILEGES ON *.* TO'root'@'xxx.xxx.xxx.xxx' IDENTIFIED BY'123456' WITH GRANT OPTION; 这相当于是给 IP-xxx.xxx.xxx.xxx 赋予了所有的权限,包括远程访问权限。然后再输入 flush privileges; 这相当于是重新加载一下 mysql 权限,这一步必须有。5.再次输入 select user,password,host from user; 可以看到 host 中已经有了新加的 IP。6.现在再次用 Navicat for MySQl 访问远程 mysql 数据库,已经能正常打开了。问题解决。7.如果还是连接不到,那是不是 MySQL Server 绑定了本地地址,打开 /etc/mysql/my.cnf, 找到:bind-address = 127.0.0.1 去除 IP 地址绑定,把它改为:bind-address = 0.0.0.0 然后重启 MySQL Server:/etc/init.d/mysql restart 错误二:ERROR 2003 (HY000): Can't connect to MySQL server on'hostxxxxx' (10061) 错误原因:mysqld 数据库服务没有启动。解决办法:检查:在 windows 的任务管理器,或者 unix/linux 下 ps -aux | grep mysql 看一下。确认服务已经启动。处理:启动 mysqld 服务 错误三:防火墙开启了 解决方法:防火墙需要允许 3306 端口连接。【注意:是在虚拟机 (LINUX) 下执行以上步骤,IP 地址 xxx.xxx.xxx.xxx 是写 windows 的 IP 地址或者%也行】(资料日期为 2022 年 11 月 10 日)
建议收藏备查!MySQL 常见错误代码说明
建议收藏备查!MySQL 常见错误代码说明\n先给大家看几个实例的错误分析与解决方案。1.ERROR 2002 (HY000): Can't connect to localMySQLserver through socket '/data/mysql/mysql.sock' 问题分析:可能是数据库没有启动或者是端口被防火墙禁止。解决方法:启动数据库或者防火墙开放数据库监听端口。2.ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 问题分析:密码不正确或者没有权限访问。解决方法:1) 修改 my.cnf 主配置文件,在 [mysqld] 下添加 skip-grant-tables,重启数据库。最后修改密码命令如下:代码语言:javascript AI 代码解释 mysql>use mysql;mysql>update usersetpassword=password("123456")where user="root"; 再删除刚刚添加的 skip-grant-tables 参数,再重启数据库,使用新密码即可登录。2) 重新授权,命令如下:代码语言:javascript AI 代码解释 mysql>grant all on*.*to'root'@'mysql-server'identified by'123456'; 3.客户端报 Too many connections 问题分析:连接数超出 Mysql 的最大连接限制。解决方法:1、在 my.cnf 配置文件里面增加连接数,然后重启 MySQL 服务。max_connections = 10000 2、临时修改最大连接数,重启后不生效。需要在 my.cnf 里面修改配置文件,下次重启生效。代码语言:javascript AI 代码解释 setGLOBALmax_connections=10000; 4.Warning: World-writable config file '/etc/my.cnf' is ignored ERROR! MySQL is running but PID file could not be found 问题分析:MySQL 的配置文件/etc/my.cnf 权限不对。解决方法:代码语言:javascript AI 代码解释 chmod644/et/my.cnf 5.InnoDB: Error: page 14178 log sequence number 29455369832 InnoDB: is in the future! Current system log sequence number 29455369832 问题分析:innodb 数据文件损坏。解决方法:修改 my.cnf 配置文件,在 [mysqld] 下添加 innodb_force_recovery=4, 启动数据库后备份数据文件,然后去掉该参数,利用备份文件恢复数据。(截至 2024 年 6 月 13 日)
FAQ
什么是 ER_GIPK_COLUMN_ALTER_NOT_ALLOWED 错误?
这是 MySQL 中一个常见的错误,用于指示尝试更改写保护列时发生的错误。这是一个"HY000″ SQLSTATE,这也意味着 SQL 语句出现“句法错误或不支持的函数”。
远程连接 MySQL 报错 1045 怎么办?
这种错误要么是密码错误,要么是未设置远程 IP 访问权限。需要授权用户访问,例如执行 grant all privileges on *.* to 'user'@'ip' identified by 'password'。
Navicat 连接报错 Host is not allowed 怎么解决?
默认安装的 mysql 无法远程连接是因为 MySQL 默认配置了不支持远程连接引起的。需要修改 user 表 host 字段为'%',并刷新权限。