Ubuntu20下安装mysql8
一、下载
[root@root ~]# wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
二、解压并重命名
[root@root ~]# tar -xJvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
[root@root ~]# mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql
三、将mysql移到/usr/local/ 目录
[root@root ~]# mv /root/mysql /usr/local/
四、新建mysql用户及组
[root@root ~]# groupadd mysql
[root@root ~]# useradd -m -r -g mysql mysql
五、添加logs目录
root@simon-pc:/usr/local/mysql# mkdir logs
六、设置/usr/local/mysql/文件夹的用户权限
[root@root ~]# cd /usr/local/mysql/
[root@root mysql]# chown -R mysql:mysql ./
七、新建my.cnf 文件
[root@root ~]# vim /etc/my.cnf
[root@root mysql]# chmod 644 /etc/my.cnf
内容如下:
1 [mysqld] 2 server-id = 1 3 port = 3306 4 bind-address = 0.0.0.0 5 max_connections = 5000 6 mysqlx_port = 33060 7 mysqlx_socket = /tmp/mysqlx.sock 8 basedir = /usr/local/mysql 9 datadir = /usr/local/mysql/data 10 socket = /tmp/mysql.sock 11 pid-file = /tmp/mysqld.pid 12 slow_query_log = ON 13 slow_query_log_file = /usr/local/mysql/logs/slow.log 14 log-error = /usr/local/mysql/logs/error.log 15 long_query_time = 0.2 16 log-bin = bin.log 17 relay-log = relay.log 18 binlog_format = ROW 19 relay_log_recovery = 1 20 character-set-client-handshake = FALSE 21 character-set-server = utf8mb4 22 collation-server = utf8mb4_unicode_ci 23 init_connect ='SET NAMES utf8mb4' 24 innodb_buffer_pool_size = 1G 25 join_buffer_size = 128M 26 sort_buffer_size = 2M 27 read_rnd_buffer_size = 2M 28 log_timestamps = SYSTEM 29 lower_case_table_names = 1 30 default-authentication-plugin = mysql_native_password
注意:
13-14行:日志文件保存目录,默认没有logs目录,需要手工添加
29行:设置mysql访问大小写不敏感
注意:my.cnf在数据库初始化前就要存在,如果初始化完成后再添加该文件,配置不会生效
八、初始化mysql数据库,生成默认密码
[root@root mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
执行后,默认在logs目录下的error.log文件中生成默认口令
九、注册服务
具体参看:https://dev.mysql.com/doc/mysql-secure-deployment-guide/8.0/en/secure-deployment-post-install.html
1、创建mysqld.service
1 cd /usr/lib/systemd/system 2 touch mysqld.service 3 chmod 644 mysqld.service
2、添加内容如下:
1 [Unit] 2 Description=MySQL Server 3 Documentation=man:mysqld(8) 4 Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html 5 After=network.target 6 After=syslog.target 7 8 [Install] 9 WantedBy=multi-user.target 10 11 [Service] 12 User=mysql 13 Group=mysql 14 15 # Have mysqld write its state to the systemd notify socket 16 Type=notify 17 18 # Disable service start and stop timeout logic of systemd for mysqld service. 19 TimeoutSec=0 20 21 # Start main service 22 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS 23 24 # Use this to switch malloc implementation 25 EnvironmentFile=-/etc/sysconfig/mysql 26 27 # Sets open_files_limit 28 LimitNOFILE = 10000 29 30 Restart=on-failure 31 32 RestartPreventExitStatus=1 33 34 # Set environment variable MYSQLD_PARENT_PID. This is required for restart. 35 Environment=MYSQLD_PARENT_PID=1 36 37 PrivateTmp=false
3、添加自启动
systemctl enable mysqld.service
或者
//配置环境变量
[root@root mysql]# vim /etc/profile
添加如下内容:
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
//让配置文件立马生效
[root@root mysql]# source /etc/profile
4、常用命令
systemctl {start|stop|restart|status} mysqld
十、添加lib库搜索
// /etc/ld.so.conf 这个文件记录了编译时使用的动态链接库的路径,告诉链接器去哪个路径下寻找链接时需要用到的库,如果找不到,就会提示链接错误。
如果我们安装了第三方的库,而没有将它放在链接器可以找到的目录,则运行使用这些第三方库的程序时,会提示找不到库。
[root@root mysql]# vim /etc/ld.so.cnf
添加如下内容:
include ld.so.conf.d/*.conf
/usr/local/mysql/lib
十一、启动和查看服务
//启动MySQL服务
systemctl start mysqld
查看服务
systemctl status mysqld
十二、登录mysql及后操作
1、登录mysql
[root@root mysql]# mysql -u root -p
首次登录用初始化时的密码登录
2、修改root口令
//修改密码
mysql> alter user 'root'@'localhost' identified by 'root';
3、查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4、建立远程连接
use mysql;
select host,user from user;
create user 'root'@'%' identified by 'root';
grant all on *.* to 'root'@'%';
flush privileges;
alter user 'root'@'%' identified by 'root' password expire never;
alter user 'root'@'%' identified with mysql_native_password by 'root';
flush privileges;
常见错误
一、设置libtinfo.so.5
执行mysql -u root -p后,有可能会出现如下错误:
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
该问题是由于缺少文件造成的,可通过ldd mysql命令查看到缺失libtinfo.so.5,可到https://pan.baidu.com/s/1SFza-Fa2-CVQh955XsJsZA,下载该文件,并拷贝到/lib/x86_64-linux-gnu目录下即可。
二、找不到mysql命令的解决办法
由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件
ln -s /usr/local/mysql/bin/mysql /usr/bin
三、Ubuntu20下Mysql连接出现cant connect to mysql server through socket '/tmp/mysql.sock'
mysql.sock 一般不是在 /tmp/mysql.sock 就是在 /var/lib/mysql/mysql.sock 这里,没有的话就用
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
或者是
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
连接一下即可
可以参考:https://zhuanlan.zhihu.com/p/87063881
四、初始化数据库出现:bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
原因是没有安装libaio.so.1,安装即可。
apt-get install libaio1 libaio-dev
五、MySQL无法启用/etc/my.cnf配置文件,重启报错Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解决方法
大概意思是权限全局可写,任何一个用户都可以写,即给与的权限太大。mysql担心这种文件被其他用户恶意修改,所以MySQL服务在启动或者关闭时,忽略掉这个配置文件。这样mysql无法关闭。该配置文件的配置项自然也就无法生效。
修改my.cnf文件的权限为644 设置为用户可读写,其他用户不可写:
chmod 644 /etc/my.cnf