文章目录
1 获取MySQL安装包
推荐官方途径下载
MySQL https://dev.mysql.com/downloads/mysql/5.7.html#downloads
下载mysql-5.7.26-el7-x86_64.tar.gz
链接:https://pan.baidu.com/s/1UY8F7UNVVM3xza09qQQhMA
提取码:jgy3
2 tar开gz包
tar -xzvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
3 重命名
cd /usr/local/
mv mysql-5.7.11-linux-glibc2.5-x86_64 mysql
4 创建my.cnf文件
my.cnf文件就是把在命令行上启动MySQL时后面的参数用cnf文件配置好,那么启动时就不再需要在命令上加如参数
cd /usr/loacl/mysql
[root@localhost mysql]# mkdir data tmp arch
vi /etc/my.cnf
示例my.cnf
[client]
default-character-set = utf8mb4
[mysql]
#开启 tab 补全
#auto-rehash
default-character-set = utf8mb4
[mysqld]
port=3306
basedir=/data/server/mysql57/
datadir=/data/server/mysql57/data/
socket=/data/server/mysql57/data/mysql.sock
symbolic-links=0
log-error=/data/logs/mysql57/mysqld.log
pid-file=/data/server/mysql57/data/mysqld57.pid
# 禁用主机名解析
skip-name-resolve
# 默认的数据库引擎
default-storage-engine = InnoDB
innodb-file-per-table=1innodb_force_recovery = 1#一些坑
group_concat_max_len = 10240sql_mode=expire_logs_days = 7memlock
### 字符集配置
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'### GTID
server_id = 330759# 为保证 GTID 复制的稳定, 行级日志
binlog_format = row
# 开启 gtid 功能
gtid_mode = on
# 保障 GTID 事务安全
# 当启用enforce_gtid_consistency功能的时候,
# MySQL只允许能够保障事务安全, 并且能够被日志记录的SQL语句被执行,
# 像create table ... select 和 create temporarytable语句,
# 以及同时更新事务表和非事务表的SQL语句或事务都不允许执行
enforce-gtid-consistency = true# 以下两条配置为主从切换, 数据库高可用的必须配置
# 开启 binlog 日志功能
log_bin = mysql57-bin
# 开启从库更新 binlog 日志
log-slave-updates = on
#slave复制进程不随mysql启动而启动
skip_slave_start=1### 慢查询日志
# 打开慢查询日志功能
slow_query_log = 1# 超过2秒的查询记录下来
long_query_time = 2# 记录下没有使用索引的查询
log_queries_not_using_indexes = 0slow_query_log_file =/data/logs/mysql57/slow.log
#log=/data/logs/mysql57/all.log
### 自动修复
# 记录 relay.info 到数据表中
relay_log_info_repository = TABLE
# 记录 master.info 到数据表中
master_info_repository = TABLE
# 启用 relaylog 的自动修复功能
relay_log_recovery = on
# 在 SQL 线程执行完一个 relaylog 后自动删除
relay_log_purge = 1### 数据安全性配置
# wei关闭 master 创建 function 的功能
log_bin_trust_function_creators = on
# 每执行一个事务都强制写入磁盘
sync_binlog = 1# timestamp 列如果没有显式定义为 not null, 则支持null属性
# 设置 timestamp 的列值为 null, 不会被设置为 current timestamp
explicit_defaults_for_timestamp=true### 优化配置
# 优化中文全文模糊索引
ft_min_word_len = 1# 默认库名表名保存为小写, 不区分大小写
lower_case_table_names = 1# 单条记录写入最大的大小限制
# 过小可能会导致写入(导入)数据失败
max_allowed_packet = 256M
# 半同步复制开启
#rpl_semi_sync_master_enabled = 1#rpl_semi_sync_slave_enabled = 1# 半同步复制超时时间设置
#rpl_semi_sync_master_timeout = 1000# 复制模式(保持系统默认)
#rpl_semi_sync_master_wait_point = AFTER_SYNC
# 后端只要有一台收到日志并写入 relaylog 就算成功
#rpl_semi_sync_master_wait_slave_count = 1# 多线程复制
# 基于组提交的并行复制方式
slave_parallel_type = logical_clock
#并行的SQL线程数量,此参数只有设置 1<N的情况下才会才起N个线程进行SQL重做。
#经过测试对比发现, 如果主库的连接线程为M, 只有M < N的情况下, 备库的延迟才可以完全避免。
slave_parallel_workers = 4### 连接数限制
max_connections = 1500# 验证密码超过20次拒绝连接
max_connect_errors = 200# back_log值指出在mysql暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中
# 也就是说,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log
# 将不被授予连接资源
back_log = 500open_files_limit = 65535# 服务器关闭交互式连接前等待活动的秒数
interactive_timeout = 3600# 服务器关闭非交互连接之前等待活动的秒数
wait_timeout = 3600### 内存分配
# 指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间
# 该表就被打开并放入其中,这样可以更快地访问表内容
table_open_cache = 1024# 为每个session 分配的内存, 在事务过程中用来存储二进制日志的缓存
binlog_cache_size = 4M
# 在内存的临时表最大大小
tmp_table_size = 128M
# 创建内存表的最大大小(保持系统默认, 不允许创建过大的内存表)
# 如果有需求当做缓存来用, 可以适当调大此值
max_heap_table_size = 16M
# 顺序读, 读入缓冲区大小设置
# 全表扫描次数多的话, 可以调大此值
read_buffer_size = 1M
# 随机读, 读入缓冲区大小设置
read_rnd_buffer_size = 8M
# 高并发的情况下, 需要减小此值到64K-128K
sort_buffer_size = 1M
# 每个查询最大的缓存大小是1M, 最大缓存64M 数据
query_cache_size = 64M
query_cache_limit = 1M
# 提到 join 的效率
join_buffer_size = 16M
# 线程连接重复利用
thread_cache_size = 64### InnoDB 优化
## 内存利用方面的设置
# 数据缓冲区
innodb_buffer_pool_size=2G
## 日志方面设置
# 事务日志大小
innodb_log_file_size = 256M
# 日志缓冲区大小
innodb_log_buffer_size = 4M
# 事务在内存中的缓冲
innodb_log_buffer_size = 3M
# 主库保持系统默认, 事务立即写入磁盘, 不会丢失任何一个事务
innodb_flush_log_at_trx_commit = 1# mysql 的数据文件设置, 初始100, 以10M 自动扩展
#innodb_data_file_path = ibdata1:100M:autoextend
# 为提高性能, MySQL可以以循环方式将日志文件写到多个文件
innodb_log_files_in_group = 3##其他设置
# 如果库里的表特别多的情况,请增加此值
#innodb_open_files = 800# 为每个 InnoDB 表分配单独的表空间
innodb_file_per_table = 1# InnoDB 使用后台线程处理数据页上写 I/O(输入)请求的数量
innodb_write_io_threads = 8# InnoDB 使用后台线程处理数据页上读 I/O(输出)请求的数量
innodb_read_io_threads = 8# 启用单独的线程来回收无用的数据
innodb_purge_threads = 1# 脏数据刷入磁盘(先保持系统默认, swap 过多使用时, 调小此值, 调小后, 与磁盘交互增多, 性能降低)
innodb_max_dirty_pages_pct = 90# 事务等待获取资源等待的最长时间
innodb_lock_wait_timeout = 120# 开启 InnoDB 严格检查模式, 不警告, 直接报错 1开启 0关闭
innodb_strict_mode=1# 允许列索引最大达到3072
innodb_large_prefix = on
[mysqldump]
# 开启快速导出
quick
default-character-set = utf8mb4
max_allowed_packet = 256M
生产my.cnf
[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set=utf8mb4
[mysqld]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-slave-start
skip-external-locking
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
query_cache_size= 32M
max_allowed_packet = 16M
myisam_sort_buffer_size=128M
tmp_table_size=32M
table_open_cache = 512
thread_cache_size = 8
wait_timeout = 86400
interactive_timeout = 86400
max_connections = 600
# Try number of CPU's*2 for thread_concurrency
#thread_concurrency = 32
#isolation level and default engine
# 默认的数据库引擎
default-storage-engine = INNODB
transaction-isolation = READ-COMMITTED
server-id = 1739
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/hostname.pid
#open performance schema
log-warnings
sysdate-is-now
binlog_format = ROW
log_bin_trust_function_creators=1
log-error = /usr/local/mysql/data/hostname.err
log-bin = /usr/local/mysql/arch/mysql-bin
expire_logs_days = 7
innodb_write_io_threads=16
relay-log = /usr/local/mysql/relay_log/relay-log
relay-log-index = /usr/local/mysql/relay_log/relay-log.index
relay_log_info_file= /usr/local/mysql/relay_log/relay-log.info
log_slave_updates=1
gtid_mode=OFF
enforce_gtid_consistency=OFF
# slave
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
#other logs
#general_log =1
#general_log_file = /usr/local/mysql/data/general_log.err
#slow_query_log=1
#slow_query_log_file=/usr/local/mysql/data/slow_log.err
#for replication slave
sync_binlog = 500
#for innodb options
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
innodb_log_group_home_dir = /usr/local/mysql/arch
innodb_log_files_in_group = 4
innodb_log_file_size = 1G
innodb_log_buffer_size = 200M
#根据生产需要,调整pool size
innodb_buffer_pool_size = 12G
#innodb_additional_mem_pool_size = 50M #deprecated in 5.6
tmpdir = /usr/local/mysql/tmp
innodb_lock_wait_timeout = 1000
#innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 2
innodb_locks_unsafe_for_binlog=1
#innodb io features: add for mysql5.5.8
performance_schema
innodb_read_io_threads=4
innodb-write-io-threads=4
innodb-io-capacity=200
#purge threads change default(0) to 1 for purge
innodb_purge_threads=1
innodb_use_native_aio=on
#case-sensitive file names and separate tablespace
innodb_file_per_table = 1
lower_case_table_names=1
[mysqldump]
quick
max_allowed_packet = 128M
[mysql]
no-auto-rehash
default-character-set=utf8mb4
[mysqlhotcopy]
interactive-timeout
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
5 创建用户&用户组
# -g:指定组ID为101
groupadd -g 101 dba
#指定用户id 524到dba组中
#-d:登录时的初始目录
useradd -u 514 -g dba -G root -d /usr/local/mysql mysqladmin
6 复制环境变量
复制环境变量到mysqladimin用户中,
cp /etc/skel/.* /usr/local/mysql
# 复制的为以下几个文件,没有这部操作的话会命令行会出现 bash
[root@localhost skel]# ll -a
总用量 24
drwxr-xr-x. 3 root root 78 3月 30 12:40 .
drwxr-xr-x. 148 root root 8192 4月 8 09:20 ..
-rw-r--r--. 1 root root 18 8月 8 2019 .bash_logout
-rw-r--r--. 1 root root 193 8月 8 2019 .bash_profile
-rw-r--r--. 1 root root 231 8月 8 2019 .bashrc
drwxr-xr-x. 4 root root 39 3月 30 12:40 .mozilla
[root@localhost skel]#
6.1 配置环境变量
vi /usr/local/mysql/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
# User specific environment and startup programs
export MYSQL_BASE=/usr/local/mysql
export PATH=${MYSQL_BASE}/bin:$PATH
6.2 修改权限
my.cnf
# 把my.cnf的owner改为mysqladmin
chown mysqladmin:dba /etc/my.cnf
#赋予mycnf权限
chmod 640 /etc/my.cnf
mysql
# 修改mysql文件夹下的所有文件的所有者
chown -R mysqladmin:dba /usr/local/mysql
# 修改文件夹下的所有文件的权限
chmod -R 755 /usr/local/mysql
7 配置开机自启动
将服务文件复制到init.d 并重命名
cd /usr/local/mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysql
赋予权限
chmod +x /etc/rc.d/init.d/mysql
新增一项新的服务文件叫给chkconfig管理
chkconfig --add mysql
8 初始化DB
8.1 安装libaio
yum -y install libaio
切换到mysqladmin账户
su mysqladmin
bin/mysqld \
--defaults-file=/etc/my.cnf \
--user=mysqladmin \
--basedir=/usr/local/mysql/ \
--datadir=/usr/local/mysql/data/ \
--initialize
8.2 查看临时密码
cat /usr/local/mysql/data/hostname.err | grep password
此密码为临时密码
9 登录
切换到mysqladmin
su - mysqladmin
启动mysql
service mysql start
登录
mysql -uroot -p
密码为上面的临时密码
use mysql 数据库
use mysql
重置密码
alter user root@localhost identified by 'ifeng001'
10 赋予用户权限
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'ifeng001'
刷新权限
flush privileges;
11 添加系统路径
vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile
12 Navicat链接
13 修改数据库存放的位置
my.cnf中指定了数据库存放位置
所以修改my.cnf即可
停止mysql服务
service mysqld stop
13.1 创建新的数据存放地址
mdkir /data01/data/
13.2 修改权限 owner
chown mysqladmin:dba -R /data01/data/
13.3 修改my.cnf
全局替换一下
[root@localhost data01]# vi /usr/local/etc/my.cnf
[client]
port = 3306
socket = /data01/data/mysql.sock
default-character-set=utf8mb4
[mysqld]
port = 3306
socket = /data01/data/mysql.sock
skip-slave-start
skip-external-locking
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
query_cache_size= 32M
max_allowed_packet = 16M
myisam_sort_buffer_size=128M
tmp_table_size=32M
table_open_cache = 512
thread_cache_size = 8
wait_timeout = 86400
interactive_timeout = 86400
max_connections = 600
# Try number of CPU's*2 for thread_concurrency
#thread_concurrency = 32
#isolation level and default engine
# 默认的数据库引擎
default-storage-engine = INNODB
transaction-isolation = READ-COMMITTED
server-id = 1739
basedir = /usr/local/mysql
datadir = /data01/data
pid-file = /data01/data/hostname.pid
#open performance schema
log-warnings
sysdate-is-now
binlog_format = ROW
log_bin_trust_function_creators=1
log-error = /data01/data/hostname.err
log-bin = /usr/local/mysql/arch/mysql-bin
expire_logs_days = 7
innodb_write_io_threads=16
relay-log = /usr/local/mysql/relay_log/relay-log
relay-log-index = /usr/local/mysql/relay_log/relay-log.index
relay_log_info_file= /usr/local/mysql/relay_log/relay-log.info
log_slave_updates=1
gtid_mode=OFF
enforce_gtid_consistency=OFF
# slave
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
#other logs
#general_log =1
#general_log_file = /data01/data/general_log.err
#slow_query_log=1
#slow_query_log_file=/data01/data/slow_log.err
#for replication slave
sync_binlog = 500
#for innodb options
innodb_data_home_dir = /data01/data/
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
innodb_log_group_home_dir = /usr/local/mysql/arch
innodb_log_files_in_group = 4
innodb_log_file_size = 1G
innodb_log_buffer_size = 200M
#根据生产需要,调整pool size
innodb_buffer_pool_size = 12G
#innodb_additional_mem_pool_size = 50M #deprecated in 5.6
tmpdir = /usr/local/mysql/tmp
innodb_lock_wait_timeout = 1000
#innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 2
innodb_locks_unsafe_for_binlog=1
#innodb io features: add for mysql5.5.8
performance_schema
innodb_read_io_threads=4
innodb-write-io-threads=4
innodb-io-capacity=200
#purge threads change default(0) to 1 for purge
innodb_purge_threads=1
innodb_use_native_aio=on
#case-sensitive file names and separate tablespace
innodb_file_per_table = 1
lower_case_table_names=1
[mysqldump]
quick
max_allowed_packet = 128M
[mysql]
no-auto-rehash
default-character-set=utf8mb4
[mysqlhotcopy]
interactive-timeout
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
13.4 启动MySQL
service mysqld start
或者第一步不用停止服务,这一步直接重启
service mysql restart
create user devteam02 identified by 'devteam02';
grant all privileges on *.* to 'devteam02'@'%'identified by 'devteam02' with grant option;
flush privileges ;
查看所在位置
show global variables like "%datadir%";