|

建站教程3:编译安装MySQL实战教程

本教程围绕 “MySQL安装” 详细讲解如何在 Linux 系统中通过源码编译方式安装 MySQL 5.x 与…

MySQL安装资源准备

1. 排除MySQL安装冲突

  • 清空自带mysql和mariadb,避免冲突
  • 删除/etc下my.cnf文件
  • 检查用户组:id mysql

2. 环境准备

2.1 用户准备

useradd -M -s /usr/sbin/nologin mysql

2.2 安装包下载

资源下载:MySQL官网
资源推荐:LNMP纯手工部署合集 — 脱离面板工具

2.3 编译前环境准备

mkdir -p /www/mysql
sudo -u mysql tar -zxvf mysql_linux.tar.gz -C /www/mysql
chown -R mysql:mysql /www/mysql

##配置环境变量 -- 一般只在当前用户下设置(.bash_profile)
MYSQL_HOME=/www/mysql
export PATH=$MYSQL_HOME/bin
source .bash_profile

1.3 编译安装注意点

--defaults-file:指定配置文件(要放在--initialize 前面)
--user: 指定用户
--basedir:指定安装目录
--datadir:指定初始化数据目录
--intialize-insecure:初始化无密码(否则生成随机密码)

MySQL Version 5.x 部署流程

1. 创建MySQL安装配置文件

vim /etc/my.cnf

[mysqld]
datadir=/www/mysql/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
lower_case_table_names=1
log-bin=mysql-bin
server_id=1
binlog-format=row
sync_binlog=1
log_slave_updates=1
default_authentication_plugin=mysql_native_password

2. 编译初始化

需注意,初始化时会打印临时密码,因MySQL5.x版本各异,–initialize-insecure 参数可能无效

cd /www/mysql/bin
./mysqld --user=mysql --datadir=/www/mysql/data --basedir=/www/mysql --initialize-insecure

3. MySQL启动

3.1 MySQL server文件修改

vim /www/mysql/support-files/mysql.server
将/usr/local/mysql 修改为 /www/mysql(实际安装位置,共五处修改)
需要修改示例代码如下:

# Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
then
  basedir=/usr/local/mysql
  bindir=/usr/local/mysql/bin
  if test -z "$datadir"
  then
    datadir=/usr/local/mysql/data
  fi
  sbindir=/usr/local/mysql/bin
  libexecdir=/usr/local/mysql/bin
else
  bindir="$basedir/bin"
  if test -z "$datadir"
  then
    datadir="$basedir/data"
  fi
  sbindir="$basedir/sbin"
  libexecdir="$basedir/libexec"
fi

3.2 MySQL启停

cd /www/mysql/support-files
./mysql.server start
./mysql.server stop

3.3 登录与用户配置

mysql -u root '-p[临时密码]'  --有临时密码
mysql -u root  --无密码(使用参数)
​
--修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_passwd';
​
--开放远程连接
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
​
--验证远程连接
mysql -uroot -p'root' -h127.0.0.1 -P3306

--检查binog
show variables like "log_%";

4. MySQL服务管理

cp /www/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list

MySQL Version 8.x 部署流程

1. 版本8.x 添加目录结构

mkdir -p /www/mysql/data
mkdir -p /www/mysql/meta
mkdir -p /www/mysql/data/log
mkdir -p /www/mysql/data/temp
mkdir -p /www/mysql/data/binlog

2. 创建my.cnf

###### [client]配置模块 ######
[client]
default-character-set=utf8mb4
socket=/www/mysql/data/tmp/mysql.sock
​
###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
socket=/www/mysql/data/tmp/mysql.sock
​
###### [mysqld]配置模块 ######
[mysqld]
skip_host_cache
skip-name-resolve=1
port=21001
user=mysql
innodb_strict_mode=0
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# MySQL服务安装的基本目录
basedir=/www/mysql
# MySQL服务数据存储
datadir=/www/mysql/meta
socket=/www/mysql/data/tmp/mysql.sock
​
# 服务ID
server-id = 221
​
# 是否只读,1代表只读,0代表读写,从库建议设置成只读 SUPER权限可无视该规则(比如root账号)
read-only=0
​
# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
authentication_policy=mysql_native_password
​
# 允许最大连接数
max_connections=100
​
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
​
open_files_limit = 2000
table_open_cache = 2048M

# 创建新表时将使用的默认存储引擎
default-storage-engine=InnoDB
innodb_buffer_pool_size = 1G
innodb_flush_log_at_trx_commit=1
innodb_io_capacity=5000
innodb_log_buffer_size=16M
general_log=0
# 0: 表名将按指定方式存储,并且比较区分大小写;
# 1: 表名以小写形式存储在磁盘上,比较不区分大小写;
lower_case_table_names=1

max_allowed_packet=16M
​
​
# 设置时区
default-time_zone='+8:00'
​
# binlog 配置 只要配置了log_bin地址 就会开启
log_bin = /www/mysql/data/binlog/mysql_bin
# 日志存储天数 默认0 永久保存
# 如果数据库会定期归档,建议设置一个存储时间不需要一直存储binlog日志,理论上只需要存储归档之后的日志
#expire_logs_days = 30
# binlog最大值
max_binlog_size = 2048M
# 规定binlog的格式,binlog有三种格式statement、row、mixad,默认使用statement,建议使用row格式
binlog_format = ROW
# 在提交n次事务后,进行binlog的落盘,0为不进行强行的刷新操作,而是由文件系统控制刷新日志文件,如果是在线交易和账有关的数据建议设置成1,如果是其他数据可以保持为0即可
sync_binlog = 1
​
# MySQL服务器安全启动的配置部分
[mysqld_safe]
# mysqld_safe进程的日志文件位置
log-error=/www/mysql/data/log/mysqld_safe.err
# mysqld_safe的pid文件存放位置
pid-file=/www/mysql/data/tmp/mysqld.pid
# mysqld_safe使用的socket文件位置
socket=/www/mysql/data/tmp/mysql.sock
​
# MySQLadmin工具的配置部分
[mysqladmin]
# mysqladmin工具使用的socket文件位置
socket=/www/mysql/data/tmp/mysql.sock

3. 初始化

mysqld --defaults-file=/etc/my.cnf --basedir=/www/mysql --datadir=/www/mysql/meta --user=mysql --initialize-insecure

4. MySQL启动

--安全启动
mysqld_safe --defaults-file=/etc/my.cnf &
​
--server启动
./mysql.server start

5. 登录与配置

mysql -u root --skip-password

--修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

--刷新权限
FLUSH PRIVILEGES;

--查看用户
use mysql;
select user,host,plugin,authentication_string from user;

开启远程
--创建用户
CREATE user 'root'@'%';
--设置首次密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
--授权用户所有权限,刷新权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

性能调优

简单性能优化,可自行搜索以下参数的作用

innodb_buffer_pool_size = 24G
innodb_log_buffer_size=48M​
max_allowed_packet=16M

MySQL安装 — 主从复制

1. 主节点创建主从复制用户

create user 'slave'@'%' identified with mysql_native_password by 'slave';
grant replication slave on *.* to 'slave'@'%';

2. 主节点机器查看binlog

show master status\G

--记录logfile和position

3. 从节点开启复制

stop slave;
change master to master_host='master_ip',master_user='slave_user',master_password='slave_passwd',master_port=21001,master_log_file='master_logfile',master_log_pos=master_position;
start slave;

4. 查看是否成功开启主从

show slave status\G

--以下两项为Yes即可
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

总结

修改密码需要注意版本
--5.6/5.1
update mysql.user set password=password('i2') where user='i2';
--5.7
ALTER USER 'i2'@'%' IDENTIFIED BY 'i2';
set password for 'i2'@'%'=password('i2');
​
解决MySQLmax连接数不生效
find && vim / -name mysqld.service
LimitNOFILE=65535
LimitNPROC=65535
service mysqld restart

因版本差异,可能有些参数还是有问题,具体的错误会在日志中打印,可借助日志定位解决问题

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注