跳到主要内容

Ubuntu 安装Mysql

更新最新包

sudo apt update
sudo apt -y dist-upgrade

安装常用工具

sudo apt -y install vim net-tools wget gcc make cmake lrzsz

在线安装

离线安装(Ubuntu deb)

安装依赖

在线安装

sudo apt -y install libmecab2 libjson-perl mecab-ipadic-utf8

离线安装

# 离线安装
wget http://archive.ubuntu.com/ubuntu/pool/main/m/mecab/libmecab2_0.996-14build9_amd64.deb /usr/local/mysql
sudo dpkg -i libmecab2_0.996-14build9_amd64.deb

# 离线安装
wget http://archive.ubuntu.com/ubuntu/pool/main/libj/libjson-perl/libjson-perl_4.04000-1_all.deb /usr/local/mysql
sudo dpkg -i libjson-perl_4.04000-1_all.deb

wget http://archive.ubuntu.com/ubuntu/pool/main/m/mecab-ipadic/mecab-ipadic-utf8_2.7.0-20070801+main-3_all.deb /usr/local/mysql
wget http://archive.ubuntu.com/ubuntu/pool/main/m/mecab/mecab-utils_0.996-14build9_amd64.deb /usr/local/mysql
wget http://archive.ubuntu.com/ubuntu/pool/main/m/mecab-ipadic/mecab-ipadic_2.7.0-20070801+main-3_all.deb /usr/local/mysql
sudo dpkg -i mecab-utils_0.996-14build9_amd64.deb mecab-ipadic_2.7.0-20070801+main-3_all.deb mecab-ipadic-utf8_2.7.0-20070801+main-3_all.deb

下载离线安装包

官方下载下载包:https://downloads.mysql.com/archives/community/ 这里我们选择 Product Version:8.4.0 Operating System:Ubuntu Linux OS Version:Ubuntu Linux 22.04 (x86, 64-bit)

下载:mysql-server_8.4.0-1ubuntu22.04_amd64.deb-bundle.tar

wget https://cdn.mysql.com/archives/mysql-8.4/mysql-server_8.4.0-1ubuntu22.04_amd64.deb-bundle.tar

解压

mkdir /usr/local/mysql & tar -xvf mysql-server_8.4.0-1ubuntu22.04_amd64.deb-bundle.tar -C /usr/local/mysql

安装

cd /usr/local/mysql

按顺序执行

sudo dpkg -i mysql-community-client-plugins_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-community-client-core_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-common_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-community-client_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-client_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i libmysqlclient24_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i libmysqlclient-dev_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-community-server-core_8.4.0-1ubuntu22.04_amd64.deb

此命令执行后会弹出窗口让你设置MySQL密码,假设密码也设置为root,设置完成后选择5.X的加密方式。

sudo dpkg -i mysql-community-server_8.4.0-1ubuntu22.04_amd64.deb

继续安装

sudo dpkg -i mysql-community-server-debug_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-server_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-community-test_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-community-test-debug_8.4.0-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-testsuite_8.4.0-1ubuntu22.04_amd64.deb

离线安装(Linux Generic)

下载安装包

官方下载下载包:https://downloads.mysql.com/archives/community/ 这里我们选择 Product Version:8.4.0 Operating System:Linux - Generic OS Version:Linux - Generic (glibc 2.28) (x86, 64-bit)

下载:mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz 或者使用mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz

wget https://cdn.mysql.com/archives/mysql-8.4/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz

离线解压安装

mysql安装路径:/usr/local/ 数据存放位置::/usr/local/data

groupadd mysql
useradd -r -g mysql mysql
tar -xvJf mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz

重命名为mysql

mv mysql-8.4.0-linux-glibc2.28-x86_64 /usr/local/mysql
mkdir /usr/local/mysql/{binlog,logs,tmp,data} -p

cd /data
chgrp -R mysql .

cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .

修改环境变量

vim /etc/profile

最后一行加上

export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
source /etc/profile

初始化mysql数据库

rm -rf /etc/my.cnf
vim /etc/my.cnf

8.4.0 之前版本

[mysql]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4

[mysqld]
port = 3306
datadir = /data
basedir = /usr/local/mysql
socket = /usr/local/mysql/data/mysql.sock
tmpdir = /usr/local/mysql/tmp
user = mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
explicit_defaults_for_timestamp = true
collation_server=utf8mb4_general_ci
default-authentication-plugin=mysql_native_password
max_allowed_packet = 16M
max_connections = 1000
max_user_connections = 1000
max_connect_errors = 1000000
transaction_isolation = READ-COMMITTED
thread-cache-size = 50
open-files-limit = 65535
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
group_concat_max_len=102400
character-set-server = utf8mb4
wait_timeout=1800
tmp_table_size=1G
sort_buffer_size=1048576
innodb_buffer_pool_size = 22G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_print_all_deadlocks = 1
innodb_log_file_size = 1G
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /usr/local/mysql/logs
gtid-mode=on
log-slave-updates=true
enforce-gtid-consistency=true
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
binlog-checksum=CRC32
#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=1000
#rpl_semi_sync_master_trace_level=32
#rpl_semi_sync_master_wait_no_slave=on
log-bin = /usr/local/mysql/binlog/mysql-bin.log
expire_logs_days = 7
binlog_cache_size = 2097152
max-binlog-size=1G
log_bin_trust_function_creators = 1
sync-binlog = 1
binlog_format=row
server-id = 1
log_slave_updates=1
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = 1
relay_log = /usr/local/mysql/binlog/mysql-relay.log
log-error = /usr/local/mysql/logs/mysqld.log
log-queries-not-using-indexes = 0
slow-query-log = 1
slow-query-log-file = /usr/local/mysql/logs/mysql-slow.log
long_query_time = 3
lower_case_table_names = 1

[mysqld_safe]
pid-file = /usr/local/mysql/data/mysqld.pid

8.4.0 及之后的版本

[mysql]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4

[mysqld]
port = 3306
datadir = /data
basedir = /usr/local/mysql
socket = /usr/local/mysql/data/mysql.sock
tmpdir = /usr/local/mysql/tmp
user = mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
explicit_defaults_for_timestamp = true
collation_server=utf8mb4_general_ci
#default-authentication-plugin=mysql_native_password
mysql_native_password=ON
max_allowed_packet = 16M
max_connections = 1000
max_user_connections = 1000
max_connect_errors = 1000000
transaction_isolation = READ-COMMITTED
thread-cache-size = 50
open-files-limit = 65535
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
group_concat_max_len=102400
character-set-server = utf8mb4
wait_timeout=1800
tmp_table_size=1G
sort_buffer_size=1048576
innodb_buffer_pool_size = 22G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_print_all_deadlocks = 1
innodb_log_file_size = 1G
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /usr/local/mysql/logs
gtid-mode=on
log-slave-updates=true
enforce-gtid-consistency=true
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
sync-master-info=1
binlog-checksum=CRC32
#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=1000
#rpl_semi_sync_master_trace_level=32
#rpl_semi_sync_master_wait_no_slave=on
log-bin = /usr/local/mysql/binlog/mysql-bin.log
binlog_cache_size = 2097152
max-binlog-size=1G
log_bin_trust_function_creators = 1
sync-binlog = 1
binlog_format=row
server-id = 1
log_slave_updates=1
relay_log_recovery = 1
relay_log = /usr/local/mysql/binlog/mysql-relay.log
log-error = /usr/local/mysql/logs/mysqld.log
log-queries-not-using-indexes = 0
slow-query-log = 1
slow-query-log-file = /usr/local/mysql/logs/mysql-slow.log
long_query_time = 3
lower_case_table_names = 1

[mysqld_safe]
pid-file = /usr/local/mysql/data/mysqld.pid
chmod 644 /etc/my.cnf
chown -R mysql:mysql /etc/my.cnf

chmod 755 /data
chown -R mysql:mysql /data

# 如果要重新初始化则需要删掉datadir下的所有文件
rm -rf /data/*
rm -rf /usr/local/mysql/data/*
rm -rf /usr/local/mysql/logs/*

touch /usr/local/mysql/logs/mysqld.log
chown -R mysql:mysql /usr/local/mysql/logs/

# 初始化配置
mysqld --defaults-file=/etc/my.cnf --initialize

# 开启mysql服务
ln -s /usr/local/mysql/bin/mysql /usr/bin

# mysqld_safe方式启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql > /usr/local/mysql/logs/mysqld_safe.log 2>&1 &

or 或者直接启动

service mysql start
service mysql stop

查询Mysql服务,如果是mysqld_safe方式是查不到的

systemctl status mysql   #查看mysql的服务状态
systemctl restart mysqld #重启mysql服务

从以上命令的返回结果中获取localhost初始密码

cat /usr/local/mysql/logs/mysqld.log

修改密码和可访问主机地址

mysql -uroot -p

-- 先改密码之后才能查询mysql.user
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
flush privileges;

select host , user , plugin ,authentication_string from mysql.user;


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
flush privileges;

update mysql.user set host = '%',plugin='mysql_native_password' where user='root';
flush privileges;

quit;

放行防火墙

firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

设置自动启动

vim /etc/systemd/system/mysql.service

修改为我们自定义的配置

[Unit]
Description=MySQL Server
After=network.service

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --log-error=/usr/local/mysql/logs/mysqld_safe.log
LimitNOFILE=5000
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false
# 重载系统服务
systemctl daemon-reload
# 实现开机自启
systemctl enable mysql

关闭SELINUX:

vim /etc/selinux/config
#SELINUX=enforcing 修改为 SELINUX=disabled

重启服务器验证

reboot
#重新连接服务器,查看mysql 服务的状态:
systemctl status mysql
#查看端口
netstat -tnap
#查看mysql启动情况
ps aux|grep mysql