Jaylon

导航

 

############Centos7.4下MySQL8.0.26版本安装############
准备好三台Linux环境 配置好网络 给后面配置MGR做准备
----------------------------------------------------------------------------------
关于MySQL版本选择 截至当前时间2021/10/10 官方基于glibc2.17版本的资料包较少
以下采用(mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz)
----------------------------------------------------------------------------------
cd /usr/local
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz

根据网上资料说明预装依赖环境 如仍不足 可参照官网boudle里的rpm包
rpm -qa | grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps ##注意自己环境下的版本 不一致的就贴换过去

yum install gcc gcc-c++ openssl openssl-devel libaio libaio-devel ncurses ncurses-deve lrzsz #加上lrzsz
yum -y install numactl

开始操作
一、
useradd mysql
cd /usr/local
tar -xvf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.26-linux-glibc2.12-x86_64 mysql
mkdir -p /usr/local/mysql/data /usr/local/mysql/log /usr/local/mysql/log/error /usr/local/mysql/log/slow /usr/local/mysql/log/mybin
chown -R mysql:mysql /usr/local/mysql
##注意:目录根据喜好自定,data目录8版本初始化如果报错就不要建,初始化时候根据指定路径生成data权限只有644
二、my.cnf
vim /etc/my.cnf
#
## my.cnf for 8.0版本
## 重要:本次配置文件适用虚拟机2GB内存而配置 请勿照搬至生产环境 后果自负
## 注意:个别建议可能需要根据实际情况作调整,请自行判断或联系我,本人不对这些建议结果负相应责任
## 本配置文件主要适用于MySQL 8.0版本
#
[client]
port = 3362
socket = /usr/local/mysql/mysql.sock ##mysqld服务有关联

[mysql]
#prompt = "\u@mysqldb \R:\m:\s [\d]> "
no_auto_rehash

[mysqld]
user = mysql
port = 3362
#主从复制或MGR集群中,server_id记得要不同
server_id = 3362
basedir = /usr/local/mysql ##mysqld服务有关联
datadir = /usr/local/mysql/data ##mysqld服务有关联
socket = /usr/local/mysql/mysql.sock ##mysqld服务有关联
pid_file = Centos-7.4-Master.pid ##mysqld服务有关联 会默认到data下 以'hostname.pid'格式为准
character_set_server = UTF8MB4
skip_name_resolve = 1
#若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数
default_time_zone = "+8:00"

#performance setttings
lock_wait_timeout = 360
open_files_limit = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
thread_stack = 512K
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
thread_cache_size = 768
interactive_timeout = 600
wait_timeout = 60
tmp_table_size = 32M
max_heap_table_size = 32M

#log settings
log_timestamps = SYSTEM
log_error = /usr/local/mysql/log/error/error.log
log_error_verbosity = 3
slow_query_log = 1
log_slow_extra = 1
slow_query_log_file = /usr/local/mysql/log/slow/slow.log
long_query_time = 0.1
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_bin = /usr/local/mysql/log/mybin/mybinlog
binlog_format = ROW
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
binlog_rows_query_log_events = 1
binlog_expire_logs_seconds = 604800
#MySQL 8.0.22前,想启用MGR的话,需要设置binlog_checksum=NONE才行
binlog_checksum = CRC32
gtid_mode = ON
enforce_gtid_consistency = TRUE

#myisam settings
key_buffer_size = 32M
myisam_sort_buffer_size = 128M

#replication settings
relay_log_recovery = 1
slave_parallel_type = LOGICAL_CLOCK
#可以设置为逻辑CPU数量的2倍
slave_parallel_workers = 64
binlog_transaction_dependency_tracking = WRITESET
slave_preserve_commit_order = 1
slave_checkpoint_period = 2

#mgr settings
loose-plugin_load_add = 'mysql_clone.so'
loose-plugin_load_add = 'group_replication.so'
## group_replication_group_name 必须是有效的 UUID。在二进制日志中为 Group Replication 事件设置 GTID 时,会在内部使用此 UUID。
## 您可以使用它SELECT UUID()来生成 UUID。
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
#MGR本地节点IP:PORT,请自行替换
#local_address的 ip:port不能与MySQL的端口一致 ;它们是必须是两个不同的端口不能混淆
loose-group_replication_local_address = "192.168.100.202:33062"
#MGR集群所有节点IP:PORT,请自行替换
loose-group_replication_group_seeds = "192.168.100.202:33062,192.168.100.203:33063,192.168.100.204:33064"
loose-group_replication_start_on_boot = OFF
loose-group_replication_bootstrap_group = OFF
loose-group_replication_exit_state_action = READ_ONLY
loose-group_replication_flow_control_mode = "DISABLED"
loose-group_replication_single_primary_mode = ON

#innodb settings
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 1434M
innodb_buffer_pool_instances = 4
innodb_data_file_path = ibdata1:12M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
innodb_max_undo_log_size = 4G
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_open_files = 65535
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_online_alter_log_max_size = 4G
innodb_print_ddl_logs = 1
innodb_status_file = 1
#注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log_error文件增长较快
innodb_status_output = 0
innodb_status_output_locks = 1
innodb_sort_buffer_size = 67108864

#innodb monitor settings
innodb_monitor_enable = "module_innodb"
innodb_monitor_enable = "module_server"
innodb_monitor_enable = "module_dml"
innodb_monitor_enable = "module_ddl"
innodb_monitor_enable = "module_trx"
innodb_monitor_enable = "module_os"
innodb_monitor_enable = "module_purge"
innodb_monitor_enable = "module_log"
innodb_monitor_enable = "module_lock"
innodb_monitor_enable = "module_buffer"
innodb_monitor_enable = "module_index"
innodb_monitor_enable = "module_ibuf_system"
innodb_monitor_enable = "module_buffer_page"
innodb_monitor_enable = "module_adaptive_hash"

#pfs settings
performance_schema = 1
#performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'

[mysqldump]
quick

chown -R mysql:mysql /etc/my.cnf

三、初始化
=====================================================================================================
----------------------------------------------------------------------------------------------------
8.0+版本的初始化用法
/usr/local/mysql/bin/mysqld --initialize
##自动生成带随机密码的root用户 密码在error.log文件中 随机密码: root@localhost: ei;<no/pG4AS
##然后第一次登录后必须立即修改密码才能进行其他操作 alter user user() identified by "123456";

/usr/local/mysql/bin/mysqld --initialize-insecure ##自动生成无密码的root用户
----------------------------------------------------------------------------------------------------
**********特别解说:初始化 只是初始化!!!初始化涉及data和log!!!**********

错误惯例(my.cnf参数置后生效先后问题):
/usr/local/mysql/bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --defaults-file=/etc/my.cnf --user=mysql &

正确样例:
/usr/local/mysql/bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql &

##某些参数会根据先后顺序执行

初始化参数中带了--user=mysql,故该命令可以root执行;datadir可以提前创建(提前创建的权限要对);未提前
创建的自动生成--datadir=/usr/local/mysql/data 的目录权限略有不足需要改进

chmod 755 /usr/local/mysql/data

如果初始化出了问题 删除data 和 log 重新执行初始化即可
=====================================================================================================

四、启动&登录
添加环境目录
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

mysql -uroot -p

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxx';
Query OK, 0 rows affected (0.01 sec)
mysql> use mysql
Database changed
mysql> select host, user, authentication_string, plugin from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+------------------
| host | user | authentication_string | plugin
+-----------+------------------+------------------------------------------------------------------------+------------------
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_pass
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_pass
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_pass
| localhost | root | $A$005$X Ze/bh?ty wH2lE/FyW4VTakA7Gslux8reGv2eMPPxtxEhf84XFROc2 | caching_sha2_passwo
+-----------+------------------+------------------------------------------------------------------------+------------------
4 rows in set (0.00 sec)
-------------------------------------------------------------------------------------------
查看user表的root用户Host字段是localhost,说明root用户只能本地登录,现在把他改成远程登录
------------------------------------------------------------------------------------------
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

=====================================================================================================
MySQL8.0之前的版本密码加密规则:mysql_native_password,
MySQL8.0密码加密规则:caching_sha2_password
不一样

修改mysql加密规则
输入命令
ALTER USER 'root'@'%' IDENTIFIED BY 'xxxxxx' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx';
FLUSH PRIVILEGES;

*****防火墙放行mysql port*****

firewall-cmd --zone=public --add-port=33062/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --reload

*****iptables防火墙的自行解决一下*****

====================================================================================================

经过以上处理 远程工具可顺利连接访问了

如果mysqld.server服务脚本里相关的socket pid basedir datadir log 等的路径都符合没有出现意外
则可以顺利制作mysql启动服务
cp mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld

修改basedir datadir 如果pid my.cnf异常则会导致服务启动异常 需对照脚本逻辑修改一下

posted on 2021-10-29 16:58  Jaylon  阅读(219)  评论(0)    收藏  举报