1. 检查工作
- 检查当前系统是否安装过 MySQL
- [CentOS6]
rpm -qa|grep mysql
→rpm -e --nodeps mysql-libs
- [CentOS7]
rpm -qa|grep mariadb
→rpm -e --nodeps mariadb-libs
- [CentOS6]
- 检查当前 MySQL 依赖环境
- libaio:
rpm -qa|grep libaio
- net-tools:
rpm -qa|grep net-tools
- libaio:
- 检查 /tmp 文件夹权限
2. 安装
在 MySQL 的安装文件目录下执行(必须按照顺序):
rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm
3. 服务初始化
为了保证数据库目录为与文件的所有者为 MySQL 登陆用户,如果你是以 root 身份运行 MySQL 服务,需要执行下面的命令初始化:mysqld --initialize --user=mysql
。
另外 --initialize
选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码。
查看密码:cat /var/log/mysqld.log
4. 服务启动+首次登陆
- 启动:
systemctl start mysqld.service
- 关闭:
systemctl stop mysqld.service
- 状态:
systemctl status mysqld.service
- 重启:
systemctl restart mysqld.service
首次登陆通过 mysql -uroot -p
进行登录,在 Enter password 时录入初始化密码。进入之后,因为初始化密码默认是过期的,所以查看数据库会报错。需要修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
。设置完密码就可以用新密码登陆,正常使用数据库了。
5. 是否自启动
查看 MySQL 是否自启动(默认自启动):systemctl list-unit-files | grep mysqld.service
如不是 enabled 可以运行如下命令设置自启动:systemctl enable mysqld.service
6. 字符集
直接插入中文数据报错。
- 修改配置文件:
vim /etc/my.cnf
,在最后加上中文字符集配置:character_set_server=utf8
。 - 重新启动 MySQL:
systemctl restart mysqld.service
- 已生成的库表字符集如何变更
修改数据库的字符集 mysql> alter database mydb character set 'utf8'; 修改数据表的字符集 mysql> alter table testTab convert to character set 'utf8';
一定要注意!除了增加 character_set_server=utf8 到 my.cnf 外,已创建的库表还要单独修改字符集。
7. 远程登陆
先确保有可以通过远程登录的账户。
user 表字段说明:
- host:表示连接类型
- % 表示所有远程通过 TCP 方式的连接
- localhost 本地方式通过命令行方式的连接 ,比如
mysql -u xxx -p xxx
方式的连接。
- user:表示用户名,同一用户通过不同方式链接的权限是不一样的。
- password:密码。所有密码串通过 password(明文字符串) 生成的密文字符串。加密算法为 MYSQLSHA1,不可逆。MySQL 5.7 的密码保存到 authentication_string 字段中而不再使用 password 字段。
如果测试的时候,还是连接不上,看看防火墙。
systemctl stop firewalld.service # 停止firewall
systemctl disable firewalld.service # 禁止firewall开机启动
systemctl restart iptables.service # 重启防火墙使配置生效
systemctl enable iptables.service # 设置防火墙开机启动
详细关于防火墙:https://www.cnblogs.com/yyxq/p/10551274.html
8. sql_mode
sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。
查看 sql_mode:show variables like 'sql_mode';
sql_mode 常用值如下:set sql_mode='ONLY_FULL_GROUP_BY';