MySQL最简安装 - 开发人员用
搭建开发用的单机、单实例mysql数据库,基于mysql5.7.39。
一、规划
1 目录规划
mysql配置文件 - /etc/my.cnf
mysql软件目录 - /opt/zbt/mysql5.7.39
mysql数据目录 - /opt/zbt/mysqldata
2 用户规划
使用zbt:zbt用户启动、关闭和运维数据库,不创建OS级别的服务
二、安装
mysql-5.7.39-el7-x86_64.tar.gz,可以到这个位置下载
https://downloads.mysql.com/archives/community/
上传到/opt/zbt,解压缩,改名为mysql5.7.39,保证/opt/zbt/mysql5.7.39下直接出现bin等一系列mysql软件目录
root用户修改主配置文件,有则直接修改,没有则创建改文件
这是唯一用到root用户的地方
vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/opt/zbt/mysql5.7.39
datadir=/opt/zbt/mysqldata
socket=/opt/zbt/mysqldata/mysql.sock
log-error=/opt/zbt/mysqldata/mysql.err
pid-file=/opt/zbt/mysqldata/mysql.pid
#character config
character_set_server=utf8mb4
三、创建数据库实例
初始化(一次性)
cd /opt/zbt/mysql5.7.39/bin
./mysqld --defaults-file=/etc/my.cnf --initialize
查找初始的root口令:
cat /opt/zbt/mysqldata/mysql.err | grep "A temporary password is generated"
启动数据库:
./mysqld_safe --defaults-file=/etc/my.cnf &
登录数据库并修改默认口令:
./mysql -uroot -p'找到的口令' -S /opt/zbt/mysqldata/mysql.sock
alter user "root"@"localhost" IDENTIFIED BY "passw0rd";
use mysql;
select host, user, password_expired, account_locked from user;
得到如下结果:
+-----------+---------------+------------------+----------------+
| host | user | password_expired | account_locked |
+-----------+---------------+------------------+----------------+
| localhost | root | N | N |
| localhost | mysql.session | N | Y |
| localhost | mysql.sys | N | Y |
+-----------+---------------+------------------+----------------+
这时唯一可用的root,其host为localhost,即表示只有在本机,才能使用这个账户,无法远程连mysql的时候使用root
不考虑了远程登录的安全,可以酌情改为:
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
参考 - 关闭数据库:
ps -ef | grep "mysqld --defaults-file=/etc/my.cnf" | grep -v grep | awk '{print $2;}' | xargs kill
四、创建数据库对象
1 创建数据库和用户
创建一个用户、一个数据库,并将该数据库授权给该用户访问
./mysql -uroot -p'passw0rd' -S /opt/zbt/mysqldata/mysql.sock
CREATE DATABASE devdb01;
CREATE USER 'user1'@'%' IDENTIFIED BY 'passw0rd';
grant all on devdb01.* to 'user1'@'%';
FLUSH PRIVILEGES;
创建普通用户并赋权后,后面开发中,就可以都使用user1来操作数据,不需要再使用root。
2 创建测试业务表和数据
--建表测试
./mysql -uuser1 -p'passw0rd' -S /opt/zbt/mysqldata/mysql.sock
create table table1(id int(18), name varchar(25));
insert into table1(id, name) values(1234, "王子英");
commit;
select id, name from table1;
drop table table1;
3 创建正式的业务表和数据
--department表
CREATE TABLE department(
dptid int PRIMARY KEY auto_increment,
dptname VARCHAR(20) NOT NULL
);
--employee表
CREATE TABLE employee(
empid int PRIMARY KEY auto_increment,
empname VARCHAR(10) NOT NULL,
phone VARCHAR(11),
departmentid int,
address VARCHAR(50),
CONSTRAINT fk_dptid FOREIGN KEY(departmentid) REFERENCES department(dptid)
);
--插入数据
INSERT INTO department VALUES (1, '客服部');
INSERT INTO department VALUES (2, '财务部');
INSERT INTO department VALUES (3, '后勤部');
INSERT INTO employee VALUES (1, '李华', '13737445685', 1, '武汉市洪山区光谷大道288号');
INSERT INTO employee VALUES (2, '张建国', '18725489687', 3, '北京市朝阳区安贞路127号');
INSERT INTO employee VALUES (3, '周晓', '13985647124', 2, '昆明市五华区滇缅大道');
INSERT INTO employee VALUES (4, '李莉', '15896582415', 1, '武汉市汉阳区人民中路瑞典小镇');
INSERT INTO employee VALUES (5, '张晓红', '13865486874', 3, '');
commit;
五、mysql启动停止
1 配置为服务
mysql5.7.X版本,软件目录下有个mysql.server,这个是给旧的linux中service服务(chkconfig等命令)体系写的,centos8开始已经不再支持。
这里直接选择使用systemctl服务体系写,做出mysqld.service文件,centos6-8都可以支持。
#mysqld.service
#Service for mysqld, with version 5.7.41
[Unit]
Description=MySQL Server
Documentation=man:mysqld(5.7.41)
Documentation=https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
PIDFile=/opt/poc/mysql/mysqldata/mysql.pid
ExecStart=/opt/poc/mysql/mysql5.7.41/bin/mysqld --pid-file=/opt/poc/mysql/mysqldata/mysql.pid $MYSQLD_OPTS
User=mysql
Group=mysql
TimeoutSec=0
PrivateTmp=true
TasksMax=infinity
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000
Restart=on-failure
RestartPreventExitStatus=1
在文件中,注意pid-file的路径是否正确,用的用户和属组是mysql,只有ExecStart不需要ExecStop。
准备好这个文件以后,用root将该文件放入systemctl的服务注册目录中,并做enable(开机自启)等一系列配置。
cp ./mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl list-unit-files | grep mysqld
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
systemctl stop mysqld
上述操作都成功后,后面再次重启服务器或虚拟机时,mysql的服务将以mysqld的形式,自动启动。
如果还是希望手工启动,可以不执行enable这步,或者systemctl disable mysqld禁用开机自启。
2 配置为启动停止脚本
如果不希望通过服务控制mysql的启动停止,也可以在mysql软件的bin目录下,编写start.sh和stop.sh,方便手工启停。
start.sh
#!/bin/bash
nohup /opt/poc/mysql/mysql5.7.41/bin/mysqld_safe --defaults-file=/etc/my.cnf > /dev/null 2>&1 &
注意start.sh中,启动使用的是手工启动更加推荐的safe模式,启动后会生成两个进程,其中父进程mysqld_safe是守护进程。这种处理方式和前面service中调用的命令不一样。
stop.sh
#!/bin/bash
kill `cat /opt/poc/mysql/mysqldata/mysql.pid`
注意kill后面的cat命令,用反引号(键盘上1左边那个键的上档字符)引起来。
附录1、问题排查
- centos8关于底层库版本过高带来的错误
启动时报错:
./mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
centos8带的是libncurses.so.6,因此可以通过建立软连接的方式解决问题,root用户执行:
ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
后续如果还有类似报错,按照此法一路解决。
浙公网安备 33010602011771号