当前位置:   article > 正文

【MySQL在Linux环境下的安装与集群搭建】_linux mysql 集群

linux mysql 集群

一、Linux环境中安装MySQL8.X

1.1、配置Linux环境下的网卡信息

使用Linux命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33打开需要配置的文件,配的改动点如下图示:
在这里插入图片描述

上述图中的DNS需要在使用Linux命令:vim /etc/resolv.conf 进行相关的DNS配置,如下图示:
在这里插入图片描述

1.2、远程拉取MySQL8.x安装包

使用Linux命令(先删再安):wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xzt下载mysql 8.0.20,如下图示:
在这里插入图片描述
解压,以及更改文件名称,与此同时将文件移动到其他文件夹下,如下图示:
在这里插入图片描述

1.3、MySQL的安装与相关参数配置

  1. 添加Path环境变量,命令如下:export PATH=$PATH:/data/software/mysql8/bin
  2. 创建用户组合用户:(创建一个用户组:mysql)groupadd mysql (创建一个系统用户:mysql并且指定用户组为mysql)useradd -r -g mysql mysql
  3. 添加数据目录:(1、创建数据目录:mkdir -p /data/software/mysql8/datas;2、更改属主和数组:chown -R mysql:mysql /data/software/mysql8/datas;3、更该模式:chmod -R 750 /data/software/mysql8/datas)
  4. 初始化MySQL:
    4.1、在/data/software/mysql8/配置参数文件:vim my.cnf目的是为了用于初始化数据库,具体配置信息如下:
[mysql]
# 默认字符集
default-character-set=utf8mb4
[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
server-id=3306
user=mysql
socket =/tmp/mysql.sock
# 安装目录
basedir=/data/software/mysql8
# 数据存放目录
datadir=/data/software/mysql8/datas/mysql
log-bin=/data/software/mysql8/datas/mysql/mysql-bin
innodb_data_home_dir=/data/software/mysql8/datas/mysql
innodb_log_group_home_dir=/data/software/mysql8/datas/mysql
#日志及进程数据的存放目录
log-error =/data/software/mysql8/datas/mysql/mysql.log
pid-file  =/data/software/mysql8/datas/mysql/mysql.pid
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1

 ##################以上要修改的########################
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128

#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

binlog_format=mixed

binlog_expire_logs_seconds =864000

# 创建新表时将使用的默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

4.2 初始化:执行命令:mysqld --defaults-file=/data/software/mysql8/my.cnf --basedir=/data/software/mysql8/ --datadir=/data/software/mysql8/datas/mysql --user=mysql --initialize-insecure

1.4、MySQL的启动与远程连接设置

1、MySQL启动方式:

# 启动命令
service mysqld start
或者用safe方式启动
/data/software/mysql8/bin/mysqld_safe --defaults-file=/data/software/mysql8/my.cnf &

# 停止命令
service mysqld stop

# 重启命令
service mysqld restart

#查看是否启动
ps -ef|grep mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2、登录MySQL

# 无密码登录方式
/data/software/mysql8/bin/mysql -u root --skip-password
# 有密码登录方式(初始的随机密码在/data/mysql8_data/mysql/mysql.log下)
mysql -u root -p
password:设置的密码
  • 1
  • 2
  • 3
  • 4
  • 5

3、修改密码

# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
  • 1
  • 2
  • 3
  • 4

4、设置允许远程登录访问(需要登录到MySQL服务中进行设置)

mysql> use mysql
mysql> update user set user.Host='%'where user.User='root';
mysql> flush privileges;
mysql> quit
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
同样的方式,在另外一台服务器上安装MySQL服务,目的是为了下一步搭建MySQL集群做准备

二,MySQL的主从集群搭建

2.1、集群搭建的目的与原因

数据库作为应用中最为核心的价值所在,随着业务不断的扩大,产生的数据也越来越大,数据的访问量也越发频繁,但是大数据量的数据,在SQL的优化层面也很容易到达瓶颈,治标不治本的优化,没有从根本上将问题解决,所以,基于以下:

  1. 数据量和业务量快熟成长,会带来性能瓶颈、服务宕机等很多问题;
  2. 单点 部署的数据库无法保证服务的高可用;
  3. 单点部署的数据库无法进行水平扩展,难以应对业务爆发式的增长;

以上问题,我们在做SQL优化的时,是无法保证的,所以基于诸多问题,MySQL的主从集群就此诞生:

分库分表的优势

  • 首先会提高系统的性能 :分库分表可以将大型的数据库分成多个小型的数据库,每个小型的数据库只需要处理部分数据,由此可以提高数据库的并发处理能力和查询的性能;
  • 提高系统的可用性:分库分表可以把数据复制到刀哥库中的表中,可以提高数据的可用性与可靠性,如果有一个数据库宕机了,其他数据库可以接管工作,保持系统的正常运行;
  • 提高系统的可扩展性:分库分表可以使系统更容易扩展,当数据量增加时,只需要增加更多的数据和表,而不是替换整个数据库;
  • 提高系统的灵活性:分库分表可以根据数据的使用情况,对不同的数据库和表进行不同的优化,例如,可以将这种经常被访问的数据放到性能较好的数据库中,提高每次查询数据的性能;
  • 降低系统的成本:分库分表可以使系统更加高效,一因此可以降低系统的一个运营成本,而且分库分表可以使用一些便宜的硬件和存储设备,因为每个小型的数据库需要的资源是不多的;

2.2、MySQL搭建集群存在的问题

分库分表并非字面意义上的将数据分到多个数据库或者多个表就完了这么简单,这个是需要的是一些列的分布式解决方案,因我们在分库分表时,会面临以下的挑战:

  1. 主键避重问题:在分库分表的环境中,由于数据同时存在不同的数据库中,某个分区数据库生成的ID就无法保证全局唯一了,所以在这个过程中,需要独立设计全局主键;
  2. 数据备份问题:随着数据由单机变为集群,整体的服务稳定性也会降低,如何去在集群环境下保证整体的服务稳定性也是需要面临的一个重要问题;
  3. 分布式事务问题:原本的单机数据库有很好的事务机制来保证数据的一致性,但分库分表之后,由于数据分布在不同的数据库,甚至分布在不同的服务器,会带来分布式问题;
  4. SQL路由问题:分库分表之后,客户端在查询数据时,应该如何快速定位目标服务器和与之对应的数据库,也是一个必须要考虑的重要问题;
  5. 跨节点查询,归并问题:跨节点查询时,每个分散的数据库中只能查出一部分数据,这时要对整体结果进行归并时,就会变得非常复杂,比如我们常见的limit、order by等操作;

所以分库分表能不分的尽量不分,参考阿里手册中的说明,预估三年内,单表数据超过500W,或者单表数据大小超过2G,可以考虑分库分表

2.3、MySQL搭建集群过程

2.3.1 主从同步原理

目的就是为了保证数据库的数据在多台服务器上保存一致,对应MySQL,通常用到的是MySQL自身提供的一套通过binlog日志在多个服务器之间进行同步的集群方案,基于这种集群方案,一方面可以提高数据的安全性,另外也可以以此为基础,提供读写分离、故障转移等其他高级功能,具体原理如下图示:
在这里插入图片描述

2.3.2 主节点(master)文件配置

1、开启binlog日志:
在这里插入图片描述
server-id:表示服务节点的唯一标识,不能与其他集群中的重复
log_bin:打开binlog日志记录,并指定文件名称
log_bn-index:binlog日志索引文件

2、从节点配置
在这里插入图片描述

server-id:服务节点的唯一标识
relay-log:打开从服务的relay-log日志。
log-bin:打开从服务的bin-log日志记录。

三、应用层提供管理多个数据源

3.1、数据库与应用相结合,可以更好的实现数据库的集群管理

例如我们可以通过DynamicDataSource来实现对多个数据源的管理,将DynamicDS模块后端的数据库指向我们之前搭建的数据库主从集群,就可以实现这样一种读写分离方式,如下图示:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/1006026
推荐阅读
相关标签
  

闽ICP备14008679号