使用的ubuntu版本为18.04,mysql的版本为5.7
下载MySQL #
首先使用linux命令下载到本地:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
然后解压缩
tar -xvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
注意:为了方便,之后的命令一律采用root账户来配置
移动到/usr/local/并且将mysql-5.7.25-linux-glibc2.12-x86_64重命名为mysql
mv mysql-5.7.25-linux-glibc2.12-x86_64 /usr/local/mysql
创建mysql用户组和用户并修改权限 #
groupadd mysql
useradd -r -g mysql mysql
创建数据目录并赋予权限
mkdir -p /data/mysql #创建目录
chown mysql:mysql -R /data/mysql #赋予权限
配置my.cnf文件,用以下命令打开
vim /etc/my.cnf
文件的内容如下[1] :
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
其中bind-address=0.0.0.0是设置允许远程连接,port=3306表示端口号为3306.
完成上面的步骤之后我们就可以进行数据库的初始化工作了,首先进入mysql的bin目录
cd /usr/local/mysql/bin/
然后执行bin目录下的mysqld脚本,用来初始化信息,
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
这里的user=mysql其实不重要,后续可以设置成root
但是很不幸它报错了,错误信息是./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file。其实原因是我们没有下载libaio这个安装包,那我们就下载一个呗,命令如下:
apt-get install libaio-dev
下载完成后再执行初始化的命令就能看到成功执行了,如下图
然后我们就可以查看数据库给我们设置的初始密码了,用下面的指令查看密码
cat /data/mysql/mysql.err
然后我们可以在末尾看到一堆字符串组成的密码,我的这个为3oTAig!nnjp1,建议大家把它复制下来,因为我们后面要用它登录。
我们现在已经完成了初始化,也得到了初始密码,所以后续就需要启动mysql,并更改我们自己的root 密码了。开始之前我们先复制mysql.server到/etc/init.d/mysql中,方便我们成功启动mysql,执行的指令如下:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
启动mysql #
然后就启动mysql,用下面的指令
service mysql start
但是它又报错了,这回的信息是Failed to start mysql.service: Unit mysql.service not found. 这回报错的原因主要是Ubuntu的18.04舍弃了mysql.service,所以我们就需要用mariadb-server来代替,主要执行下面三条指令
# 首先需要安装mariadb-server
apt install -y mariadb-server
# 启动服务
systemctl start mariadb.service
# 添加到开机启动
systemctl enable mariadb.service
结果更惨了,它第一条指令就报错了,说unable to locate package mariadb-server
这个错误只要是在Linux下,每个Linux的发行版都会维护一个自己的软件仓库,我们常用的几乎所有软件都在这里面。用apt-get install命令直接安装。相比于源码安装,更新(configure,make,makeinstall)会方便很多。
而在Ubuntu下,我们维护一个源列表,源列表里面都是一些网址信息,这每一条网址就是一个源,这个地址指向的数据标识着这台源服务器上有哪些软件可以安装使用。
我们的这个问题很可能就是没有更新,所以只需要用以下指令更新就行,
apt-get update
结果确实如我们所料,然后就是继续我们尚未完成的那三条指令,一次执行,结果如下图:
解决完所有的问题我们重新启动mysql,这回就能看到成功的结果了,我们可以查看进程信息来确定mysql的状态。
然后我们执行bin目录下的mysql脚本,用之前系统给的密码登录。
./mysql -u root -p
登录之后就能看到对应的信息了,然后我们在mysql里执行下面的命令来修改密码
SET PASSWORD = PASSWORD('123456');
update mysql.user set authentication_string=password('123456') where user='root';
FLUSH PRIVILEGES;
远程连接mysql #
密码修改完成之后就可以在远程服务器上用我们自己的密码启动mysql了,但是我们从自己的电脑上仍然不能访问,所以我们呢仍需做以下的配置来开启这种访问。
use mysql
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES; #设置立即生效
这样理论上是完成了,但是我们忽略了一个很重要的细节,那就是我们之前用了mariadb-server来做替代,但是它还没有被配置呢。我们查看3306端口的信息,果然发现还没有修改成功[2] 。
所以我们呢下面就需要找到mariadb-server的配置文件对它进行修改了,我们找到50-server.cnf,然后修改它的内容。
将下图中光标所指的那一栏给注释掉,让其不指定127.0.0.1
然后重启服务器,重启完之后再查看端口信息,可以看到已经成功修改了。
我们重新切换到root用户,然后用我们用自己的密码登录mysql,查看mysql的访问权限信息
其中host一列代表哪个host可以远程访问访问当前数据库;%表示任意host可以访问,localhost代表本机。上图说明root是可以被任意访问的。如果不是,可以用以下指令开放权限,并且让其立即生效。
grant all privileges on *.* to 'root'@'%' identified by '123456'
flush privileges;
完成之后我们用自己本地的mysql来连接远程的服务器,可以看到已经成功连接了。
至此整个连接数据库的过程就成功完成了。
参考 #
- ^ https://blog.csdn.net/qq_37598011/article/details/93489404?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
- ^ https://www.cnblogs.com/daydayup-lin/p/11913266.html
Last modified on 2021-06-19