mysql支持中文表情5.1升级5.7教程

安装前工作:
1.从官方网址下载MySQL5.7.20源码包,
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20.tar.gz

2.解压进入mysql源码目录
mysql5.7.20源码放在/usr/local/src

cd /usr/local/src
tar zxvf  mysql-5.7.20.tar.gz

3.编译mysql源码

#yum -y install  gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake  libaio libaio-devel autoconf bzr bison libtool
#yum -y install  gcc gcc-c++ ncurses ncurses-devel cmake

1.在DB主机上编译安装mysql5.7

编译与安装:

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.7 \
-DMYSQL_DATADIR=/var/lib/mysql5.7 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql5.7.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost/boost_1_59_0  
  
make && make install   

#boot_1_59_0下载失败,手动下载解压tar xzf boost_1_59_0.tar.gz
2.环境配置

chown -R mysql:mysql /usr/local/mysql5.7 
chown -R mysql.mysql /var/lib/mysql5.7  
  
cd /usr/local/mysql5.7  
cp ./my.cnf /etc/mysql5.7/my.cnf          --暂时将my.cnf中的端口改为4306,将sock文件都加上一个5.7的后缀,因为要和mysql5.1同时运行。  
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld5.7    --暂时命名为mysqld5.7 

3.初始化数据库

cd /usr/local/mysql5.7
./mysqld --initialize --defaults-file=/etc/mysql5.7/my.cnf --basedir=/usr/local/mysql5.7 --datadir=/var/lib/mysql5.7 --user=mysql

#在MySQL 5.6版本以前是 bin/mysql_install_db  --user

#在4306端口上启动mysql5.7的数据库

/etc/init.d/mysqld5.7  start  

#重置root密码

/usr/local/mysql5.7/bin/mysqladmin --port=4306 --socket=/var/lib/mysql/mysql5.7.sock -uroot -hlocalhost password '123456'  

#登录以验证服务可用性

/usr/local/mysql5.7/bin/mysql --port=4306 --socket=/var/lib/mysql/mysql5.7.sock -uroot -p  

以上步骤,在线上实施业务库升级前均要实施完成。

线上实施工作
1.切换线上业务至备用DB,停DB主机的mysql5.1的数据库
mkdir -p /data/backup/20171116
1.1备份数据库主机上5.1数据库中的"mysql"库

mysqldump -A -uroot -p > /data/backup/20171116/backup_mysql.sql  

备份该元数据库,以防后面升级失败时用于回撤。
1.2停db主机上原3306端口的5.1数据库

service mysqld stop  

移走原mysql5.1使用的配置文件和服务启动脚本:

mkdir -p /data/backup/20161027  
mv  /etc/my.cnf  /data/backup/20161027  
mv /etc/init.d/mysqld  /data/backup/20161027  

2.使用mysql_upgrade升级数据库5.7版本
这里采用的是in place升级方式,主要特点是直接把原5.1数据库的数据目录交给新编译安装的mysql5.7使用,但这需要处理一些兼容性问题。
详细介绍参见以下链接:
http://dev.mysql.com/doc/refman/5.7/en/upgrading.html#upgrade-procedure-inplace

2.1登录db主机关闭5.1的数据库

service mysqld stop  

如果5.7的库仍然在4306端口运行着,此时同样也要关闭。

/etc/init.d/mysqld5.7 stop  

2.2修改/etc/my.cnf
注释掉table_cache = 1500 这一行参数,因为高版本的mysql会因不支持该参数而启动失败。

删除/etc/mysql5.7/my.cnf目录,该目录及配置文件是之前基于4306端口运行mysql5.7时所使用的。
2.3修改mysql服务管理脚本mysqld

mv  /etc/init.d/mysqld5.7  /etc/init.d/mysqld  
vi  /etc/init.d/mysqld  

首先将以下两行参数,第一行设为/etc/my.cnf,第二行直接把–defaults-file部分删除。

conf=/etc/mysql5.7/my.cnf  
$bindir/mysqld_safe --defaults-file="/etc/mysql5.7/my.cnf" --datadir="$datadir"  

在该文件中找到以下两个参数,设置如下,其中datadir直接复用原mysql5.1的数据目录:

basedir=/usr/local/mysql5.7  
datadir=/data/mysql  

找到以下段落,设置datadir为正确的值:

if test -z "$basedir"  
then  
  basedir=/usr/local/mysql5.7  
  bindir=/usr/local/mysql5.7/bin  
  if test -z "$datadir"  
  then  
    datadir=/data/mysql  
  fi  
  sbindir=/usr/local/mysql5.7/bin  
  libexecdir=/usr/local/mysql5.7/bin  

2.4启动mysql5.7
先清空之前的错误日志,便于观察:echo “” > /var/log/mysqld.log
启动数据库: /etc/init.d/mysqld  start
观察错误日志输出信息,会看到因为数据目录中不存在5.7版本的管理信息而产生的报错,但不会影响数据库启动。

2.5执行mysql_upgrade升级数据库版本

/usr/local/mysql5.7/bin/mysql_upgrade -u root -p  

执行后会显示mysql对全部库表执行了一次检查和修复、升级,升级正常则不会有报错信息。

重启数据库以使上面的升级结果生效:

/etc/init.d/mysqld  stop  
/etc/init.d/mysqld  start  

按以下步骤检查:
登录mysql检查下是否增加了一个performance_schema的库;
进入名为mysql的库,检查是否新增了innodb_index_stats,innodb_table_stats,proxies_priv,slave_master_info,slave_relay_log_info,slave_worker_info 这6张表;
检查mysql.user表,是否新增了Create_tablespace_priv,plugin,authentication_string,password_expired这4个字段;
检查业务上使用的数据库表、数据是否正常;
再观察mysql的错误日志输出信息;

mysql_upgrade命令做了些什么工作:
mysql_upgrade examines all tables in all databases for incompatibilities with the current version of MySQL.
mysql_upgrade also upgrades themysql system database so that you can take advantage of new privileges or capabilities.

2.6配置环境变量
编辑/etc/profile文件,在PATH变量中增加以下信息:

vi /etc/profile
PATH=/usr/local/mysql5.7/bin:$PATH  
export PATH  

source /etc/profile

运行mysql -V看显示的版本信息是不是5.7 。登录下数据库看是否正常。

至此,版本升级工作全部结束。
业务应用在使用升级后的数据库时,未发现存在读写或其它问题。
基于新升级后的数据库,成功得配置了与mysql master的主从复制关系。

升级原因
1.业务中使用中文表情,mysql5.1不支持utf8mb4,只能升级5.6+
2.
mysql出现错误Can’t initialize character set utf8

#在/usr/share/mysql/charsets/Index.xml添加复制utf8改成utf8mb4

<charset name="utf8mb4">
  <family>Unicode</family>
  <description>UTF-8 Unicode</description>
  <alias>utf-8</alias>
  <collation name="utf8_general_ci"     id="33">
   <flag>primary</flag>
   <flag>compiled</flag>
  </collation>
  <collation name="utf8_bin"            id="83">
    <flag>binary</flag>
    <flag>compiled</flag>
  </collation>
</charset>

#修改/etc/mysql5.7/my.cnf编码为utf8mb4

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
port=3306
user=mysql
character-sets-dir =/usr/share/mysql/charsets/
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
log_timestamps=SYSTEM
explicit_defaults_for_timestamp=true

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
log-error=/var/log/mysqld5.7.log
pid-file=/var/run/mysqld/mysqld5.7.pid
#socket=/var/lib/mysql/mysql5.7.sock

[client]
default-character-set = utf8mb4
socket=/var/lib/mysql/mysql.sock

[mysql]
default-character-set = utf8mb4
#socket=/var/lib/mysql/mysql5.7.sock

修改完不能重启mysql,重启navicat就连不上mysql
3.在业务代码连接mysql使用utf8mb4
#修改django项目setting.py

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'outing_store',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'OPTIONS': {'charset':'utf8mb4'},
    },
}

#修改要是用了sqlalchemy,需要修改连接器对象

vi applib/mode/modules.py
Base = declarative_base()
engine = create_engine('mysql://root:123456@0.0.0.0/outing_data?charset=utf8mb4',pool_size=50, pool_recycle=3600,  echo=False)
Session = sessionmaker(bind=engine)

mysql相关命令

ALTER DATABASE `database` DEFAULT CHARACTER SET utf8mb4;
ALTER TABLE `table` DEFAULT CHARACTER SET utf8mb4;
alter table `table_name` convert to character set utf8mb4;
echo "" > /var/log/mysqld5.7.log 
show variables like "char%"

#解压:
tar zxvf FileName.tar.gz
#压缩:
tar zcvf FileName.tar.gz DirName
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值