Mysql的安装与配置
mysql安装和配置
一、卸载rpm自带的mysql版本
- 检查是否安装mysql:rpm -qa | grep mysql
- 检查是否安装了mariadb:rpm -qa | grep mariadb
- 卸载:rpm -e xxx
- 强制卸载(普通卸载不成功的情况下):rpm -e --nodeps xxx
注意:在安装指定版本的mysql前必须先执行卸载
二、安装mysql
- 下载tar.gz格式的mysql文件包
- 创建软件的安装目录:mkdir /usr/applications
- 解压文件包到安装目录:tar xzf 文件包 -C /usr/applications
- 重命名:mv 解压后的文件包 新的文件包名
- 添加安装目录到配置文件/etc/profile:export PATH=/usr/applications/mysql/bin:$PATH
- 更新配置文件:source /etc/profile
- 添加磁盘,创建分区并进行挂载,用于存放mysql中创建的数据
注意:挂载的时候需要配置/etc/fstab文件,在新建的挂在上建议把dev/新建分区名写成UUID形式,可以使用blkid查看UUID内容
例如:UUID="9ff5ea05-ecc0-404d-9ecf-4a3d00286941" /mnt/sdb1 xfs defaults,uquota,gquota 0 0
-
在新的挂载目录创建/mysql/data目录:mkdir /mnt/新建的分区名/mysql/data
-
创建用户并配置密码:
- 创建用户:useradd 用户名
- 配置密码:passwd 用户名
-
为安装目录和数据的存放目录设置权限:
- 安装目录:chown -R root /usr/applications/*
- 数据存放目录:chown -R root /mnt/sdb1/mysql
-
初始化mysql:mysqld --initialize-insecure --user=root --basedir=/usr/applications/mysql --datadir=/mnt/sdb1/mysql/data
mysql5.7提供了两个初始化方式:--initialize和--initialize-insecure,前者会创建一个临时的复杂密码,更加的安全
但是很麻烦,推荐使用后者初始化,不会生成密码。basedir是mysql安装目录,datadir是数据的存放目录。
2020-03-21T02:35:06.653633Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-03-21T02:35:07.005339Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-03-21T02:35:07.108492Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-03-21T02:35:07.182990Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 93d72af1-6b1c-11ea-8876-080027f6c610.
2020-03-21T02:35:07.185803Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-03-21T02:35:07.187172Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
- 配置mysql文件/etc/my.cnf
[mysqld]
user=root
basedir=/usr/applications/mysql
datadir=/mnt/sdb1/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
- 启动mysql服务:
-
sys-V方式:
启动前必须先执行:cp /usr/applications/mysql/support-files/mysql.server /etc/init.d/mysqld,注意这一步必须执行,mysqld名称不能写错,否则会启动不了
-方式一:service mysqld restart
-方式二:/etc/init.d/mysqld restart(这个主要是在centos6中,7也可以使用)启动服务后,如果登陆出现-bash: mysql: 未找到命令,打开/etc/profile检查是否有错误,然后重新使用source编译,就可以正常登陆了
-
systemd方式:
- 配置/etc/systemd/system/mysqld.service,内容如下:
[Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/usr/applications/mysql/bin/mysqld --defaults-file=/etc/my.cnf # 每次修改只需要修改ExecStart这一行就可以了,前边是mysqld的路径,后便是my.cnf的路径 LimitNOFILE = 5000
- 保存退出
- 直接运行systemctl start mysqld会报错
Warning: mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units. Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
- 根据提示,直接运行systemctl daemon-reload
- 再次运行systemctl start mysqld
-
- 关闭mysql服务:service mysqld stop
- mysql的连接方式:
- 本地socket连接:mysql -u root -p -S /tmp/mysql.sock
- 域名和端口远程连续:mysql -u liuyang -p -h10.0.2.15 -P3306
- 不进入mysql界面的情况下查询语句(免交互):mysql -u liuyang -p -h 10.0.2.15 -P 3306 -e 'show databases;'
通过 -e 查询语句 来实现
mysql -u liuyang -p -h 10.0.2.15 -P 3306 -e 'show databases;' Enter password: +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
- 恢复数据用 < 数据文件:mysql -u root -p < /路径/文件名.sql
注意:使用这种恢复数据的时候,需要写名文件路径,并且这种方式多用于恢复数据的情况
sql文件内容: show databases; create database test charset utf8mb4; 登陆后查看内容: show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set Time: 0.019s
- source用法:也用于数据的备份恢复,格式为:source /路径/文件.sql,source用于进入mysql交互界面后,< 用于未进入交互界面之前。
三、多实例配置
- 在数据存储目录下的mysql里创建多个目录,例如3306、3307、3308、3309等,分别在这些data目录下
创建my.cnf配置文件
以3306配置文件为例:
[mysqld]
user=root
basedir=/usr/applications/mysql
datadir=/mnt/sdb1/mysql/3306/data
socket=/mysql/3306/mysql.sock
server_id=6
port=3306
log_error=/mysql/3306/mysql.log
log_bin=/mysql/3306/mysql-bin
[mysql]
socket/tmp/mysql.sock
- 初始化数据:
- mv /etc/my.cnf /etc/my.cnf.bak
- 初始化多实例:
mysqld --initializer-insecure --basedir=/usr/applications/mysql --database=/mnt/sdb1/mysql/3306/data
mysqld --initializer-insecure --basedir=/usr/applications/mysql --database=/mnt/sdb1/mysql/3307/data
mysqld --initializer-insecure --basedir=/usr/applications/mysql --database=/mnt/sdb1/mysql/3308/data
mysqld --initializer-insecure --basedir=/usr/applications/mysql --database=/mnt/sdb1/mysql/3309/data