安装mysql-server
apt-get install mysql-server
mysql数据库默认用户为root,安装过程中会要求你设置数据库密码。
修改数据库文件路径
安装完成了之后,我们可以开始将数据库文件路径设为数据盘,这样数据安全一些,重装系统后数据也还在
#创建新目录,我这里的mnt是数据盘
mkdir -p /mnt/data/mysql
#复制以前的数据库文件过来
cp -R /var/lib/mysql/* /mnt/data/mysql
#设置权限
chown -R mysql:mysql /mnt/data/mysql
修改mysql配置文件
#打开配置文件
vi /etc/mysql/my.cnf
#找到下面这项并修改
datadir = /mnt/data/mysql
修改启动配置
#打开配置文件
vi /etc/apparmor.d/usr.sbin.mysqld
#在配置文件中找到下面的项
/var/lib/mysql r
/var/lib/mysql/** rwk
#修改成
/mnt/data/mysql r
/mnt/data/mysql/** rwk,
经过以上设置,数据库文件就在/mnt/data/mysql下了,重启mysql服务后生效。
service apparmor restart
service mysql restart
统一编码为UTF-8
统一编码很重要,否则会因为数据库的编码、表的编码、插入/查询数据的编码不一致而导致错误,务必统一编码后再执行创建数据库、创建表等操作。
如图:
运行结果提示
Error: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
意思是说:操作符“=”比较的字符集不一致,一个是latin1_swedish_ci,一个是utf8_general_ci。
因为表的数据编码是latin1_swedish_ci,filter_by()查询传入的字符串又是utf8_general_ci。
我的环境是mysql5.7,本文所有配置都自己实测过而写的。
开始修改mysql默认编码,
#5.6及以下版本 打开配置文件
vi /etc/mysql/my.cnf
#在下面的标签中找到修改或添加这几个项
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
#5.7版本打开
vi /etc/mysql/mysql.conf.d/mysqld.cnf
#在下面的标签中找到修改或添加这几个项
[mysqld]
character-set-server=utf8
vi /etc/mysql/conf.d/mysql.cnf
#在下面的标签中找到修改或添加这几个项
[mysql]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
重启服务生效。
service apparmor restart
service mysql restart
================
新建数据库
安装好后是没有数据库的,我们需要新建一个我们项目所使用的数据库
连接数据库
mysql -u root -p
会提示输入数据库密码,按回车确认。
进入mysql控制台后就可以输入mysql命令了
#查看数据库
show databases;
#创建数据库
create database wapian;
#如果想删掉某个数据库
drop database xxxx;
还有其他的命令如use wapian;show tables;等自己去查吧
查看数据库各表的编码
#切换到项目数据库
use wapian
SHOW VARIABLES LIKE 'collation_%';
SHOW VARIABLES LIKE 'character_set_%';
这是未统一编码的数据库和表
有latin1_swedish_ci和utf8_general_ci,所以肯定会出错。
由于仓促,导致没有统一编码,使用数据库时各种错误,所以我直接用前面提到的方法,修改mysql配置文件,统一编码为utf8.
然后进入mysql控制台,输入以下命令,重新建数据库
drop database wapian
create database wapian
再次查看编码,完全统一了。
连接字符串
如果是使用flask-sqlalchemy和pymysql连接mysql
连接字符串可以这样设置:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:mypassword@localhost:3306/wapian?charset=utf8mb4'