mysql生产问题总结(一)windows环境下spark2mysql插入中文乱码问题(亲自试探过)

本文详细记录了解决Spark插入MySQL数据时出现的中文乱码问题和主键重复错误的全过程。通过修改MySQL配置文件my.ini中的字符集、调整字段长度并正确设置URL参数,最终实现了数据的正确插入。

前言:网上搜集了很多资料,又惊醒了多次试探,终于成功了。

刚开始spark插入mysql的数据格式。
在这里插入图片描述
后面按照网上一顿更改my.ini文件也还是没有改好。
在这里插入图片描述
在这里插入图片描述

1、找到C:\ProgramData\MySQL\MySQL Server 5.7下的my.ini文件,右键用Notepad++打开,修改红色框的内容。

[client]
default-character-set=gbk
[mysql]
default-character-set=gbk
[mysqld]
character-set-server=utf8
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、创建表

create table day_video_city_access_topn_stat ( day varchar(8) not null, cms_id bigint(10) not null, city varchar(50) not null, times bigint(10) not null, times_rank int not null, primary key (day, cms_id, city) );
查看表的结构以及对应字符集,这时候默认的字符集就是utf8。
在这里插入图片描述

3、配置url

设置参数 useUnicode=true&characterEncoding=UTF-8
在这里插入图片描述
最后执行插入代码,执行过程中会报以下错:
1)报错MySQLIntegrityConstraintViolationException: Duplicate entry ‘79’ for key ‘PRIMARY’
这个的意思是mysql的符合主键会有重复,因为都是20170511 4000 ?的数据,引种中文乱码,city都是?所以会造成主键重复。
2)插入mysql时遇到问题java.sql.BatchUpdateException: Incorrect string value: ‘\xF0\x9D\x94\xB9+)…’ for column ‘city’ at row
这个是因为字段的值已经超出了字段的长度的限制了。刚开始的建表时候city的varchar(10)长度太短了,更改为varchar(50)这个问题就解决了。
查询mysql数据,中文乱码的问题终于解决了。
在这里插入图片描述

<think>好的,用户的问题是在Ubuntu系统上使用Spark将数据写入MySQL数据库。我需要根据用户提供的引用和系统指令来构建回答。首先,用户提供的引用中有几个相关的,比如引用[1]提到安装MySQL和创建数据库,引用[3]是关于Spark写入MySQL时的问题解决方案,引用[4]提到了数据存储到数据库的方法。 首先,我应该分步骤说明整个过程。用户可能需要从环境准备开始,包括安装必要的组件,比如Java、SparkMySQL和连接器。然后,创建测试用的数据库和表,这部分可以参考引用[1]中的示例,数据库名spark,表名student。接下来,配置Spark应用程序,需要添加MySQL的JDBC驱动,这里引用[3]提到驱动版本和URL的问题,需要确保驱动正确。 然后,编写Spark代码,这部分需要示例代码,使用DataFrame API,设置连接属性,如URL、用户、密码,还要注意字符集,引用[3]中的配置可能需要调整my.cnf文件,所以需要提醒用户修改MySQL的字符集设置以避免乱码。 接下来是提交任务,用户可能需要知道如何通过spark-submit来运行程序,并且确保驱动包被正确引用。常见问题部分,可以包括驱动问题、字符集、权限问题,参考引用[3]中的解决方案,比如修改my.ini中的字符设置,但Ubuntu下应该是my.cnf,需要指出正确的路径。 相关问题部分,用户可能还想了解性能优化、其他数据库连接方式,以及数据同步方法,比如使用Flink,如引用[2]中的例子,或者定时任务如引用[4]提到的Python脚本。这些可以作为相关问题提出。 需要确保所有数学公式和代码块符合格式要求,使用$...$和$$...$$,但在这个回答中可能数学公式不多,主要是代码块。检查LaTeX语法是否正确,比如在需要的地方使用正确的符号。最后,引用标识要自然地添加在对应的位置,比如在提到创建数据库时引用[1],字符集问题引用[3]。</think>### 分步解决方案:在Ubuntu上使用Spark将数据写入MySQL数据库 #### 1. 环境准备 - **安装MySQL** 参考厦门大学数据库实验室教程安装MySQL[^1]: ```bash sudo apt update sudo apt install mysql-server sudo mysql_secure_installation ``` - **创建数据库和表** 登录MySQL并执行: ```sql CREATE DATABASE spark; USE spark; CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), score FLOAT ); ``` - **安装Spark与依赖** 确保已安装Java 8+和Spark,并添加MySQL JDBC驱动: ```bash wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.28.tar.gz tar -zxvf mysql-connector-java-8.0.28.tar.gz cp mysql-connector-java-8.0.28/mysql-connector-java-8.0.28.jar $SPARK_HOME/jars/ ``` #### 2. 配置Spark应用 ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("SparkToMySQL") \ .config("spark.jars", "/path/to/mysql-connector-java-8.0.28.jar") \ .getOrCreate() # 示例数据 data = [(1, "Alice", 89.5), (2, "Bob", 92.0)] df = spark.createDataFrame(data, ["id", "name", "score"]) # 写入MySQL df.write.format("jdbc") \ .option("url", "jdbc:mysql://localhost:3306/spark?useUnicode=true&characterEncoding=utf8") \ .option("dbtable", "student") \ .option("user", "root") \ .option("password", "your_mysql_password") \ .mode("append") \ .save() ``` #### 3. 解决常见问题 - **字符集配置** 修改MySQL配置文件`/etc/mysql/my.cnf`,添加以下内容[^3]: ```ini [mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 ``` 重启MySQL服务: ```bash sudo systemctl restart mysql ``` - **权限问题** 确保MySQL用户有远程/本地写入权限: ```sql GRANT ALL PRIVILEGES ON spark.* TO 'root'@'localhost' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` #### 4. 提交Spark任务 ```bash spark-submit --driver-class-path /path/to/mysql-connector-java-8.0.28.jar your_spark_script.py ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值