mysql8三种安装方式

本文详细介绍了MySQL8的安装、初始化、配置解析、备份恢复、集群、优化维护及安全特性,包括账户与安全的变更,如用户创建、认证插件、密码管理和角色管理等。

一、mysql8的与众不同。

MySQL从5.7一跃直接到8.0,这其中的缘由,咱就不关心那么多了,有兴趣的朋友自行百度,本次的版本更新,在功能上主要有以下6点:

  账户与安全

  优化器索引

  通用表表达式

  窗口函数

  InnoDB 增强

  JSON 增强

重点只对账户与安全进行详细阐述,其他特性请看参考博客。

一、账户与安全

1.用户的创建与授权

  在MySQL5.7的版本:

  > grant all privileges on *.* to '用户名'@'主机' identified by '密码';

  在MySQL8.0需要分开执行:

  >create user '用户名'@'主机' identified by '密码';

  >grant all privileges on *.* to '用户名'@'主机';

  用以前的一条命令在8.0里面创建用户,会出现sql语法错误

2.认证插件更新

  MySQL5.7默认身份插件是mysql_native_password

  MySQL8.0默认的身份插件是caching_sha2_password
  查看身份认证插件命令:show variables like 'default_authentication_plugin%';
  身份认证插件可以通过以下2中方式改变:

       1)系统变量default_authentication_plugin去改变,在my.ini文件的[mysqld]下面设置default_authentication_plugin=mysql_native_password即可
  2)如果希望只是某一个用户通过mysql_native_password的方式认证,可以修改数据库mysql下面的user表的字段,执行以下命令:  >alter user '用户名'@'主机' identified with mysql_native_password by '密码';

3.密码管理

  MySQL8.0的密码管理策略有3个变量

  password_history 修改密码不允许与最近几次使用过的密码重复,默认是0,即不限制

  password_reuse_interval 修改密码不允许与最近多少天的使用过的密码重复,默认是0,即不限制
  password_require_current 修改密码是否需要提供当前的登录密码,默认是OFF,即不需要;如果需要,则设置成ON

  查询当前MySQL密码管理策略相关变量,使用以下命令:

  >show variables like 'password%';

  1)设置全局的密码管理策略,在my.ini配置文件中,设置以上3个变量的值这种设置方式,需要重启mysql服务器;某些生产环境不允许重启,MySQL8.0提供了关键字persist,持久化,执行以下命令:

  >set persist password_history=6;

  这条命令会在数据目录下生成新的配置文件(/var/lib/mysql/mysqld-auto.cnf),下次服务器重启的时候除了读取全局配置文件,还会读取这个配置文件,这条配置就会被读入从而达到持久化的目的
  2)针对某一个用户单独设置密码管理策略

  >alter user '用户名'@'主机' password history 5;

  这样,这个用户的password_history 就被设置成了5,查看一下:

  >select user,host,authentication_string,Password_reuse_history from user; 

  查看某一张的字段的所有字段,使用以下命令:

  >desc 表名;

4.角色管理 角色:一组权限的集合 一组权限赋予某个角色,再把某个角色赋予某个用户,那用户就拥有角色对应的权限

1)创建一个角色

>create role '角色1';

2)为这个角色赋予相应权限

>grant insert,update on *.* to '角色1';

3)创建一个用户

>create user '用户1' identified by '用户1的密码';

4)为这个用户赋予角色的权限

>grant '角色1' on *.* to '用户1'; 执行完上面4步,用户1就拥有了插入与更新的权限

5)再创建1个用户

>create user '用户2' identified by '用户2的密码';

6)为这个用户赋予同样的角色

>grant '角色1' on *.* to '用户2';

执行完上面2步,用户2也用了角色1的权限,即插入与更新 查看用户权限,执行以下命令:

>show grants for '用户名';

7)启用角色,设置了角色,如果不启用,用户登录的时候,依旧没有该角色的权限

>set default role '角色名' to '用户名';

8)如果一个用户有多个角色,使用以下命令

>set default role all to '用户名';

MySQL中与用户角色相关的表:mysql.default_roles、mysql.role_edges,有兴趣的朋友可以进去查看下。

9)撤销权限 >revoke insert,update on *.* from '角色名';

 

二、mysql8的安装与初始化。

1、yum安装。

使用rpm安装yum仓库:

# wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm

 

# sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm

安装完成后会在 /etc/yum.repos.d文件夹里面获得两个文件:mysql-community.repo && mysql-community-source.repo。

其中mysql的repo文件如下:

# Enable to use MySQL 8.0 

[mysql80-community] name=MySQL 8.0 Community Server baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/ 

enabled=1 

gpgcheck=1 

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

yum安装mysql

# sudo yum install mysql-server

 设置开机自启并启动mysql服务。

首次登陆密码在/var/log/mysqld.log中寻找:

# grep 'temporary password' /var/log/mysqld.log

2、源码安装,比较复杂,详查官方文档,源码安装比二进制只多了编译的步骤,编译过后,安装步骤跟二进制安装一样。

3、二进制安装:需要先下载二进制tar包。

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar xvf /path/to/mysql-VERSION-OS.tar.xz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chown mysql:mysql mysql-files
shell> chmod 750 mysql-files
shell> bin/mysqld --initialize --user=mysql
shell> bin/mysql_ssl_rsa_setup
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

注意:mysql-files目录的作用在于,将数据导入导出的操作限制到此特定目录。相关命令关键字:load(导入)、slecte * from 表名 into outfile ......

重点:MySQL默认配置文件顺序:
/etc/my.cnf-----/etc/mysql/my.cnf----/usr/local/mysql/my.cnf的顺序读取配置文件的,当有多个配置文件时,mysql会以读取到的最后一个配置文件中的参数为准。
手工指定my.cnf位置的时候必须跟在mysqld后面第一个参数 

4、初始化:yum安装不需要初始化,因为systemd启动时会默认先进行初始化再启动实例,二进制和源码安装需要初始化。

5、通过yum+自定义初始化,本人比较喜欢的一种安装方式,技能保证速度,还能自定义参数,省去自己写systemd:

##只要是在新机器上部署服务,第一步先关闭selinux和firewalld

1)、yum install 或者从http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/下载想要的版本。

2)、修改配置文件,将其放在dadadir同级目录。
数据目录:
datadir
basedir:yum安装情况下不用修改,默认是/usr。因为涉及到/usr/share/msql的一些公共可用的文件。

服务id:
server-id = 7657

端口和socket配置:
port=3309
mysqlx_port=13309
mysqlx_socket=/data/mysql/3309/mysqlx.sock
socket=/data/mysql/3309/mysql.sock
pid-file=/data/mysql/3309/mysqld.pid

开启半同步复制:

开启慢查询:

3)、初始化:
mysqld --defaults-file=/data/mysql/3309/my.cnf  --initialize-insecure 

4)、systemd启动:
(1)systemd管理的服务,与服务相关的目录和文件的权限一定要与启动用户对应,否则无法启动。
(2)可以先命令行启动,启动成功后,再转为systemd管理。因为有些服务有依赖,systemd直接启动失败后不好调试。

#mysqld --defaults-file=/data/mysql/3309/my.cnf -D  ,建议使用system启动,此方式可以作为临时使用。

5)、mysql -uroot -P port进入数据库,修改root用户密码,并删除root@'localhost'的登录方式。
select user,host,authentication_string,plugin from mysql.user
create user root@'%' identified by '1qaz2wsx'
grant all privileges on *.* to root@'%' WITH GRANT OPTION
drop user root@'localhost'

6)回收权限:
revoke select on `数据库`.`表` from '用户名'@'host';
退出数据库并进行登录验证。
 

三、配置文件解析。

2、修改配置文件,将其放在dadadir同级目录。
数据目录:
datadir
basedir:yum安装情况下不用修改,默认是/usr。因为涉及到/usr/share/msql的一些公共可用的文件。

服务id:
server-id = 7657

端口和socket配置:
port=3309
mysqlx_port=13309
mysqlx_socket=/data/mysql/3309/mysqlx.sock
socket=/data/mysql/3309/mysql.sock
pid-file=/data/mysql/3309/mysqld.pid

开启gtid_mode

开启半同步复制:

开启慢查询:

企业级配置如下:(mysql8)

[mysql]
prompt = [\\u@\\p][\\d]>\\_
no-auto-rehash

[mysqld_safe]
malloc-lib=tcmalloc

[mysqldump]
single-transaction

[mysqld]
# basic settings #
user = mysql
autocommit = 1
server-id = 7657
character_set_server=utf8mb4
datadir=/data/mysql/3309/data
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
max_allowed_packet = 64M
event_scheduler = 1
port=3309
mysqlx_port=13309
mysqlx_socket=/data/mysql/3309/mysqlx.sock
socket=/data/mysql/3309/mysql.sock
pid-file=/data/mysql/3309/mysqld.pid

# connection #
interactive_timeout = 1800
wait_timeout = 1800
lock_wait_timeout = 1800
skip_name_resolve = 1
max_connections = 4096
max_user_connections = 1024
max_connect_errors = 1000000

# table cache performance settings
table_open_cache = 4096
table_definition_cache = 4096
table_open_cache_instances = 64

# session memory settings #
#read_buffer_size = 16M
#read_rnd_buffer_size = 32M
#sort_buffer_size = 32M
#tmp_table_size = 64M
#join_buffer_size = 128M
#thread_cache_size = 64

# log settings #
log_error = error.log
log_bin = binlog
log_error_verbosity = 2
general_log_file = general.log
slow_query_log = 1
slow_query_log_file = slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
long_query_time = 2
lower_case_table_names=1
min_examined_row_limit = 100
log-bin-trust-function-creators = 1
log-slave-updates = 1

# innodb settings #
innodb_page_size = 16384
innodb_flush_log_at_trx_commit = 1
innodb_buffer_pool_size = 2g
innodb_buffer_pool_instances = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 4096
innodb_lock_wait_timeout = 5
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 0
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
innodb_log_buffer_size = 64M
innodb_purge_threads = 4
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 128M
innodb_write_io_threads = 16
innodb_read_io_threads = 16 
innodb_file_per_table = 1
innodb_stats_persistent_sample_pages = 64
innodb_autoinc_lock_mode = 2
innodb_online_alter_log_max_size=1G
innodb_open_files=4096

# replication settings #
master_info_repository = TABLE
relay_log_info_repository = TABLE
sync_binlog = 1
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = ROW
binlog_rows_query_log_events = 1
relay_log = relay.log
relay_log_recovery = 1
slave_skip_errors = ddl_exist_errors
#slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'


# replication settings mysql8.0 #
binlog_transaction_dependency_tracking = WRITESET
transaction_write_set_extraction = XXHASH64
slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 16
slave_preserve_commit_order = 1
slave_transaction_retries = 128
binlog_gtid_simple_recovery = 1
log_timestamps = system



# semi sync replication settings #
plugin-load = "semisync_master.so;semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_master_timeout = 3000
loose_rpl_semi_sync_slave_enabled = 1

# password plugin #
default_authentication_plugin = mysql_native_password

# perforamnce_schema settings
performance-schema-instrument='memory/%=COUNTED'
performance_schema_digests_size = 40000
performance_schema_max_table_instances = 40000
performance_schema_max_sql_text_length = 4096
performance_schema_max_digest_length = 4096


[mysqld-5.7]
# new innodb settings #
#loose_innodb_numa_interleave = 1
#innodb_buffer_pool_dump_pct = 40
#innodb_page_cleaners = 16
#innodb_undo_log_truncate = 1
#innodb_max_undo_log_size = 2G
#innodb_purge_rseg_truncate_frequency = 128


四、备份与恢复。

1、mysqldump

2、xtrabackup

3、binlog2sql:根据binlog日志生成回滚语句。

五、集群。

1、MHA

2、MMM

3、官方NDB集群

六、优化与日常维护。

1、表空间的释放:optimize 和 truncate

 

七、可视化工具和审计工具:

1、navicat

2、yearning,github地址:https://github.com/cookieY/Yearning

参考文章:

1、mysql8新特性:

https://www.cnblogs.com/xyabk/p/10882913.html

https://juejin.im/entry/5b88a725f265da43784bc596

2、mysql安装:

yum安装:

https://www.jianshu.com/p/224a891932d8

https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html

二进制安装:

https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html

初始化:

https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值