总所周知,MySQL 被 Oracle 收购后,CentOS 的镜像仓库中提供的默认的数据库也变为了 MariaDB,如果想了解 MariaDB 和 CentOS 的区别,可以参考官网介绍,想用 MariaDB 的同学可以参考 MariaDB 安装指南
言归正传,在 CentOS 上安装 MySQL 差不多有四个步骤
根据自己的操作系统选择合适的安装源,和其他公司一样,总会让大家注册账号获取更新,注意是 Oracle 的账号,如果不想注册,下方有直接下载的地址,下载之后通过 rpm -Uvh
安装。
$wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'$sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm$yum repolist all | grep mysqlmysql-connectors-community/x86_64 MySQL Connectors Community 36mysql-tools-community/x86_64 MySQL Tools Community 47mysql57-community/x86_64 MySQL 5.7 Community Server 187
先解释下为什么下载的是 5.7 版本的,现在最新的是 5.7 版本的,当然官网默认都是最新版本的,但是下载的页面也有说明
The MySQL Yum repository includes the latest versions of:
MySQL 8.0 (Development)
MySQL 5.7 (GA)
MySQL 5.6 (GA)
MySQL 5.5 (GA - Red Hat Enterprise Linux and Oracle Linux Only)
MySQL Cluster 7.5 (GA)
MySQL Cluster 7.6 (Development)
MySQL Workbench
MySQL Fabric
MySQL Router (GA)
MySQL Utilities
MySQL Connector / ODBC
MySQL Connector / Python
MySQL Shell (GA)
也就是说这个安装源包含了上面列举的这些版本,当然包括 5.6 版本的。
如果想安装最新版本的,直接使用 yum 命令即可
$sudo yum install mysql-community-server
如果想要安装 5.6 版本的,有2个方法。命令行支持 yum-config-manager
命令的话,可以使用如下命令:
$ sudo dnf config-manager --disable mysql57-community$ sudo dnf config-manager --enable mysql56-community$ yum repolist | grep mysqlmysql-connectors-community/x86_64 MySQL Connectors Community 36mysql-tools-community/x86_64 MySQL Tools Community 47mysql56-community/x86_64 MySQL 5.6 Community Server 327
或者直接修改 /etc/yum.repos.d/mysql-community.repo
这个文件
# Enable to use MySQL 5.6[mysql56-community]name=MySQL 5.6 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/enabled=1 #表示当前版本是安装gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/enabled=0 #默认这个是 1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
通过设置 enabled
来决定安装哪个版本。
设置好之后使用 yum
安装即可。
启动命令很简单
$sudo service mysqld start $sudo systemctl start mysqld #CentOS 7$sudo systemctl status mysqld● mysqld.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS) Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 2481 (mysqld_safe) CGroup: /system.slice/mysqld.service ├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr └─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...
说明已经正在运行中了。
对于 MySQL 5.7 版本,启动的时候如果数据为空的,则会出现如下提示
The server is initialized.
An SSL certificate and key files are generated in the data directory.
The validate_password plugin is installed and enabled.
A superuser account 'root'@'localhost' is created. A password for the superuser is set and stored in the error log file.To reveal it, use the following command:sudo grep 'temporary password' /var/log/mysqld.log
简单的说就是服务安装好了,SSL 认证的文件会在 data 目录中生存,密码不要设置的太简单了,初始密码通过下面的命令查看,赶紧去改密码吧。
安装提示,查看密码,登录数据库,然后修改密码:
$ mysql -uroot -p #输入查看到的密码mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
由于 5.7 版本在安装的时候就设置好了,不需要额外设置,但是 5.6 版本建议从安全角度完善下,运行官方脚本即可
$ mysql_secure_installation
会提示设置5个关键位置
查看 yum 源中有哪些默认的组件:
$ yum --disablerepo=\* --enablerepo='mysql*-community*' list available
需要安装直接通过 yum
命令安装即可。
在 /etc/my.cnf
中设置默认的编码
[client]default-character-set = utf8[mysqld]default-storage-engine = INNODBcharacter-set-server = utf8collation-server = utf8_general_ci #不区分大小写collation-server = utf8_bin #区分大小写collation-server = utf8_unicode_ci #比 utf8_general_ci 更准确
创建数据库
CREATE DATABASE <datebasename> CHARACTER SET utf8;CREATE USER 'username'@'host' IDENTIFIED BY 'password';GRANT privileges ON databasename.tablename TO 'username'@'host';SHOW GRANTS FOR 'username'@'host';REVOKE privilege ON databasename.tablename FROM 'username'@'host';DROP USER 'username'@'host';
其中
Django 默认使用的是 sqlite3 数据库,可以修改如下
DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/path/to/my.cnf', 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" , 'isolation_level':'read committed', 'init_command': 'SET default_storage_engine=INNODB', }, 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', }}# my.cnf[client]database = 'mydatabase'user = 'mydatabaseuser'password = 'mypassword'default-character-set = utf8
重点关注下 OPTIONS
选项,它会优先与下面的配置项。在 Django 官方文档说明中,主要强调了 init_command
, isolation_level
这两个选项的设置。
为了防止数据的丢失,mysql 5.7 和新装的 5.6 版本都新增加了一个模式 STRICT_TRANS_TABLES
,在这个模式下,如果插入数据中断就会报错,而不是仅仅之前的警告。之前的模式默认为 NO_ENGINE_SUBSTITUTION
. 所以也建议设置为 STRICT_TRANS_TABLES
或者 STRICT_ALL_TABLES
. 在选项中设置或者在数据库中设置都可以的。
这是在 Django 1.11 版本中新增加的一个选择,当运行并发负载时,来自不同会话的数据库事务(例如,处理不同请求的单独线程)可能会相互交互,这些交互受每个会话的事务隔离级别的影响。默认有 5 个隔离级别,默认为 REPEATABLE-READ
mysql> SELECT @@global.tx_isolation;+-----------------------+| @@global.tx_isolation |+-----------------------+| REPEATABLE-READ |+-----------------------+1 row in set (0.00 sec)- read uncommitted # SELECT的时候允许脏读,即SELECT会读取其他事务修改而还没有提交的数据。- read committed# SELECT的时候无法重复读,即同一个事务中两次执行同样的查询语句,若在第一次与第二次查询之间时间段,其他事务又刚好修改了其查询的数据且提交了,则两次读到的数据不一致。- repeatable read# SELECT的时候可以重复读,即同一个事务中两次执行同样的查询语句,得到的数据始终都是一致的。实现的原理是,在一个事务对数据行执行读取或写入操作时锁定了这些数据行。但是这种方式又引发了幻想读的问题。因为只能锁定读取或写入的行,不能阻止另一个事务插入数据,后期执行同样的查询会产生更多的结果。数据库默认的级别。- serializable# 与可重复读的唯一区别是,默认把普通的SELECT语句改成SELECT …. LOCK IN SHARE MODE。即为查询语句涉及到的数据加上共享琐,阻塞其他事务修改真实数据。serializable模式中,事务被强制为依次执行。- None# 无隔离级别
mysql 中默认的时间戳是 UTC 时间,需要改为服务器时间的话官网提供了 3 种方式
$ mysql_tzinfo_to_sql tz_dir$ mysql_tzinfo_to_sql tz_file tz_name$ mysql_tzinfo_to_sql --leap tz_file
tz_dir 代表服务器时间数据库,CentOS 7 中默认的目录为 /usr/share/zoneinfo
,tz_name 为具体的时区。如果设置的时区需要闰秒,则使用 --leap
,具体的用法如下:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql$ mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql$ mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql
联系客服