Our system required data sync between each sub system, and it charged by be, last friday I think data sync maybe finished, but at six o'clock before I went to home, I found a problem, The sql from binlog have a problem that it can't display Chinese word right, so it changed the sql structure, sql maybe like this:
update user set id='145', name='乱码?, version='10';
Our database use innodb and out tables use UTF-8 character set, I search this problem by google and other search engine, but there are less info, it can't help me to solve this problem.
When go home, I write a test of problem, use mysql 5.0.18
drop table test;
create table test(
name text default null
)engine=INNODB DEFAULT CHARSET=utf8;
insert into test(name) values ("测试");
mysqlbinlog --hexdump E:\programing\Mysql\data\mysql-bin.000001>E:\test.sql
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES 15 */;
DELIMITER /*!*/;
# at 4
#8118 9:58:42 server id 1 end_log_pos 102 Start: binlog v 4, server v 5.1.17-beta-community-nt-debug-log created 8118 9:58:42 at startup
# Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.
ROLLBACK/*!*/;
# at 102
#8118 9:59:31 server id 1 end_log_pos 183 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1226109571/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
create database web/*!*/;
# at 183
#8118 9:59:37 server id 1 end_log_pos 322 Query thread_id=3 exec_time=0 error_code=0
use web/*!*/;
SET TIMESTAMP=1226109577/*!*/;
create table test(
name text default null
)engine=INNODB DEFAULT CHARSET=utf8/*!*/;
# at 322
#8118 9:59:38 server id 1 end_log_pos 100 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1226109578/*!*/;
insert into test(name) values ("测试")/*!*/;
# at 422
#8118 9:59:38 server id 1 end_log_pos 449 Xid = 11
COMMIT/*!*/;
# at 449
#8118 10:5:20 server id 1 end_log_pos 526 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1226109920/*!*/;
drop table test/*!*/;
# at 526
#8118 10:5:20 server id 1 end_log_pos 665 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1226109920/*!*/;
create table test(
name text default null
)engine=INNODB DEFAULT CHARSET=utf8/*!*/;
# at 665
#8118 10:5:21 server id 1 end_log_pos 100 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1226109921/*!*/;
insert into test(name) values ("测试")/*!*/;
# at 765
#8118 10:5:21 server id 1 end_log_pos 792 Xid = 17
COMMIT/*!*/;
# at 792
#8118 10:6:16 server id 1 end_log_pos 93 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1226109976/*!*/;
update test set name="我很很晕"/*!*/;
# at 885
#8118 10:6:16 server id 1 end_log_pos 912 Xid = 18
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
All goes on, Oh, god, I think maybe this problem happened at hibernate insert data into database.
This make me headache!
分享到:
相关推荐
- 如果因为删除日志文件导致MySQL无法启动,需要编辑`my.cnf`配置文件,将`log-bin=mysql-bin`和`binlog_format=mixed`这两行注释掉。这通常用于启用或禁用二进制日志,重启MySQL服务后,问题应该得到解决。 通过...
日志文件如二进制日志(log-bin)用于主从复制,错误日志(log_error)记录严重错误,查询日志记录SQL语句但可能影响性能。 通过上述多方面的优化,可以显著提升MySQL数据库的性能,保证系统的稳定性和高可用性。在实际...
- **日志记录**:确保日志记录工具(如Log4j)的配置文件中指定了正确的字符编码。 #### 三、案例实践 以修改JVM参数为例,假设当前的启动命令如下: ``` /opt/IBM/WebSphere/AppServer/java/bin/java -Declipse....
- **步骤**:将解压后的`bin`目录添加到系统的环境变量Path中,以便可以在任何位置运行MySQL的命令行工具。 - **操作指南**: - 打开“控制面板”->“系统和安全”->“系统”->“高级系统设置”->“环境变量”。 -...
此外,如果需要在MySQL中添加自定义函数,并且需要写入二进制日志(例如在主从复制环境中),在创建函数前,需要设置`log_bin_trust_function_creators`参数。这个参数决定了是否信任创建函数的用户有足够的权限。若...
为了使其在MySQL重启后仍然生效,需在`my.cnf`配置文件中添加`log-bin-trust-function-creators=1`。 5. **Linux环境下表名大小写问题**:在Linux系统中,MySQL默认表名区分大小写,可能导致因大小写错误而查询不到...
- 使用`cd`命令切换到MySQL的bin目录,通常是`C:\Program Files\MySQL\MySQL Server 5.6\bin`,当然这取决于你安装的具体路径。 - 在命令行中输入`mysqld.exe --verbose --help`或`mysql --verbose --help`,这会...
- 确认data文件夹内是否有必要的目录结构,例如ibdata1、ib_logfile等文件,这些都是MySQL正常运行所必需的。 如果这些文件缺失或者损坏,可能需要尝试修复或者重新安装MySQL。在一些特定情况下,也可以通过拷贝一...
本文档将介绍Hive的安装以及在Linux环境下配置Hive以连接到MySQL数据库的详细步骤,同时提供了解决Hive乱码问题的相关信息。 首先,Hive的安装过程分为以下几个步骤: 1. 将Hive安装包解压至集群中的任一机器上。 ...
- log_bin:启用二进制日志功能,用于数据复制和备份。 - sql_mode:配置MySQL的SQL模式,控制SQL语法的严格性等。 当MySQL服务无法启动时,通常需要修改配置文件中的某些参数值。例如,如果无法启动,可能是因为...
/path/to/bin/mysqlbinlog --no-defaults /path/to/binlog/mysql_bin.000005 ``` `--no-defaults`选项告诉`mysqlbinlog`不要加载任何配置文件,从而避免因配置文件中的`default-character-set=utf8mb4`引起的错误。...
在MySQL数据库环境中,`mysqlbinlog` 是一个非常重要的工具,它用于读取和解析MySQL的二进制日志(binlog),这对于数据恢复、复制和审计等操作至关重要。然而,当`mysqlbinlog`的版本与运行的MySQL服务器版本不匹配...
2. 在配置文件中找到[mysqld]部分,并在其下添加配置项:log-bin=binary-log。这里的binary-log是你指定的二进制日志文件的名称。 3. 保存配置文件的更改并重启MySQL服务。重启后,在MySQL的data目录下可以看到名为...
CustomLog "|bin/rotatelogs.exe -l C:/Progra~1/Apache~1/Apache2/logs/access%Y-%m-%d.log 86400" common ``` 这样做可以让日志文件每天自动分割一次。 ### 三、测试配置 - 创建一个名为`phpinfo.php`的文件...
- 修正gem路径:`ln -s /usr/local/bin/gem /usr/bin/gem` 4. **安装Passenger模块** 使用`gem install passenger`安装,这是一个用于Ruby on Rails的高效Web服务器模块。 5. **安装Redmine** - 解压Redmine...