分类
WEB开发

mysql保存IOS聊天表情发生异常解决

问题描述:
mysql保存表情数据时,字段content类型为varchar,字符集utf8。发生异常:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x91\x8C’ for column

可能的原因:
mysql中规定utf8字符MaxLen=3,但是某些unicode字符转成utf8编码之后有4个字节。

解决方法:
修改content字段为MEDIUMBLOB(原来是varchar),并且把SELECT语句修改成如下
SELECT CAST(content AS CHAR CHARACTER SET utf8) AS content
INSERT语句不需要修改

分类
IT运维

windows下mysql免安装版常用配置

1、卸载mysql服务
mysql remove

2、安装mysql服务
mysql install

3、初始化mysql,data目录需要为空,日志文件会生成随机的密码,看日志文件,data目录下的.err文件。
mysqld –initialize

4、启动mysql服务
net start msyql

5、修改mysql密码为123456,下面的命令会提示输入就密码,看日志文件,data目录下的.err文件
mysqladmin -u root -p password 123456

mysql.ini配置
[client]
port=13306
[mysql]
default-character-set=utf8
[mysqld]
port=13306
#路径保证正确,最好是全路径。
basedir=”E:\mysql\”
datadir=”E:\mysql\data\”
character-set-server=utf8
default-storage-engine=INNODB

分类
IT运维

windows下mysql备份bat

网上找的代码,因为我的路径有空格,有点问题,做个记录修改如下:

rem *******************************Code Start*****************************
@echo off
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
set EXE_PATH="D:\Program Files\MySQL\MySQL Workbench 6.3 CE\mysqldump.exe"
%EXE_PATH% --opt -u root --password=123456 test > D:\backup\db\test_%Ymd%.sql
@echo on
rem *******************************Code End*******************************

windows自动备份后使用7z压缩:

rem *******************************Code Start*****************************
@echo off
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
set EXE_PATH="D:\backup\mysqldump.exe"
%EXE_PATH% --opt -u root --password=123456 -h 192.168.0.101 -P 3306 test > D:\backup\db\test_%Ymd%.sql
set zpath="C:\Program Files\7-Zip\7z.exe"
%zpath% a D:\backup\db\lm-web_%Ymd%.7z D:\backup\db\lm-web_%Ymd%.sql
del "D:\backup\db\lm-web_%Ymd%.sql"
@echo on
rem *******************************Code End*******************************
分类
IT运维

Mysql 5.5+源码安装过程

1、安装编译依赖环境

yum install make
yum install bison
yum install gcc* -y
yum install cmake
yum install ncurses

2、添加mysql用户与组

groupadd mysql
useradd -g mysql -s /sbin/nologin -M mysql

3、mysql源码编译

wget ftp://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/mysql-5.5.43.tar.gz
tar zxvf mysql-5.5.43.tar.gz
cd mysql-5.5.43
rm CMakeCache.txt

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 -DMYSQL_DATADIR=/usr/local/mysql55/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=9036 -DMYSQL_UNIX_ADDR=/usr/local/mysql55/data/mysql.sock -DMYSQL_USER=mysql -DWITH_DEBUG=0

make
make install

4、安装数据库

cd /usr/local/mysql55
chown -R mysql.mysql .
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql55 --datadir=/usr/local/mysql55/data
chown -R root .
chown -R mysql ./data

5、启动数据库

cp support-files/my-medium.cnf /etc/my.cnf
#将mysql的启动服务添加到系统服务中  
cp support-files/mysql.server /etc/init.d/mysql.server
#现在可以使用下面的命令启动mysql
service mysql.server start
#停止mysql服务
service mysql.server stop
#重启mysql服务
service mysql.server restart

6、添加开机启动

chkconfig --add mysql.server

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
WEB开发

Mysql批量执行sql语句优化

最近一个项目需要批量导入功能,开始时采用在服务端循环调用存储过程,一条一条插入的方式。项目完成交给客户后,客户反应导入速度太慢,于是开始查找原因。发现这种逐条调用存储过程插入的方式每秒钟大概处理50条,而客户一次导入超过5万条。于是开始优化。
逐条调用的方式,每操作一条记录,都有一次数据库的连接、释放过程,比较耗时,首先想到了用批量executeBatch语句。经过反复调试,最终65000条数据批量导入耗时20秒,以下是代码:

String activityId = "";
String phones = "";//这里是批量导入的手机号,英文逗号隔开的
Connection conn = null;
CallableStatement proc = null;
int[] ret = null;
try{
	conn = DriverManager.getConnection(ORA_URL, ORA_USER, ORA_PWD);//此处换成你自己的数据库连接信息
	//conn.setAutoCommit(false);
	proc = conn.prepareCall("{call pro_add_phone(?,?)}");
	String[] tempPhones = phones.split(",");
	for(String phone : tempPhones){
		if(phone != null && !phone.equals("")){
			proc.setString(1, activityId);
			proc.setString(2, phone);
			//proc.registerOutParameter(3, Types.INTEGER);
			proc.addBatch();
		}
	}
	ret = proc.executeBatch();
	//conn.commit();
}catch(SQLException ex2){
	System.out.println(ex2.toString());
	ex2.printStackTrace();
}catch(Exception ex){
	System.out.println(ex.toString());
}finally{
	try{
		if(proc!=null)
		proc.close();
		if(conn!=null)
		conn.close();
	}catch(SQLException ex1){
		System.out.println(ex1.getMessage());
	}
}

调试过程中遇到不少问题,记录如下:
1、这里用的Java连接包为:mysql-connector-java-5.1.30-bin.jar,刚开始用以上代码发现并不明显,发现是这个jar包版本太低,貌似不支持真正的批量执行(据说executeBatch内部依然是如条执行的)。
2、数据库连接url添加参数rewriteBatchedStatements=true
3、Can’t call executeBatch() on CallableStatement with OUTPUT parameters存储过程不能带输出参数,最后去掉了输出参数。
原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
IT运维

linux下定时备份mysql数据库

设置每周3凌晨1点自动备份mysql数据库test,数据库账号为root,密码为123456,备份文件目录为/web/backup/。
1、首先写自动备份脚本db_backup.sh

cd /web/backup/
vi db_backup.sh
#脚本内容如下:

#!/bin/sh
echo 'db backup begin at '`date '+%Y-%m-%d %H:%M:%S.%N'`
mysqldump -uroot -p123456 test>/web/backup/test`date +%Y%m%d`.sql
echo 'db backup end at '`date '+%Y-%m-%d %H:%M:%S.%N'`

#不要忘记将脚本db_backup.sh权限修改为可执行
chmod 777 db_backup.sh

#当数据量大时,备份成的sql文件将非常大,此时可以备份成压缩文件
mysqldump -uroot -p123456 test | gzip > /web/backup/test`date +%Y%m%d`.sql.gz

2、添加linux定时任务,任务执行日志为/web/backup/execute.log

crontab -e
0 1 * * 3 /web/backup/db_backup.sh>>/web/backup/execute.log
#Esc+wq保存退出
wq

3、linux定时任务参数说明
基本格式:
*  *  *  *  *  command
分  时  日  月  周  命令
第1列表示分钟1~59
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
IT运维

mysql修改账号密码、添加新账号并赋予所有权限

1、添加用户server,密码为123456

GRANT USAGE ON *.* TO 'server'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

2、将权限赋予用户server

grant all privileges on *.* to 'server'@'%' IDENTIFIED BY '123456';

3、使修改生效

flush privileges;

4、修改用户密码

#修改root密码为123456
mysqladmin -u root -p password 123456
#以下方式必须是先用root帐户登入mysql,然后执行:
UPDATE user SET password=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
IT运维

Linux下安装mysql

1、yum安装mysql

yum -y install mysql mysql-server mysql-devel

2、修改mysql默认编码和默认端口号
vi /etc/my.cnf
default-character-set=utf8
port=1036

3、修改mysql账号root密码

方法一:
在mysql系统外,使用mysqladmin
mysqladmin -u root -p password 123456
Enter password: 【输入原来的密码】

方法二:
通过登录mysql系统,
mysql -uroot -p
Enter password: 【输入原来的密码】
mysql>use mysql;
mysql> update user set password=password(“123456”) where user=’root’;
mysql> flush privileges;
mysql> exit;

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。