Linux安装Mysql8.0.27集群(传统方式&Docker方式)&&主从复制配置

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Linux安装Mysql8.0.27集群(传统方式&Docker方式)&&主从复制配置

正文


一、传统方式


1、下载好安装包(Linux - Generic (glibc 2.12) (x86, 64-bit), Compressed TAR Archive)上传到服务器解压缩


#执行之后是tar格式文件,再解压
[root@bogon ~]# xz -d mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz 
#解压
[root@bogon ~]# tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar
#移动重命名
[root@bogon ~]# mv mysql-8.0.27-linux-glibc2.12-x86_64 /usr/local/mysql


或者


[root@localhost ~]# tar -Jxvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz


2、在mysql目录下创建data文件存放数据


[root@bogon ~]# mkdir -p /usr/local/mysql/data


3、创建mysql用户组和用户


[root@bogon ~]# groupadd mysql
[root@bogon ~]# useradd -g mysql mysql


4、授权


[root@bogon ~]# chown -R mysql.mysql /usr/local/mysql/


5、创建mariadb文件并授权给 mysql


[root@bogon mysql]# mkdir /var/log/mariadb
[root@bogon mysql]# touch /var/log/mariadb/mariadb.log
[root@bogon mysql]# chown -R mysql:mysql /var/log/mariadb/


6、配置mysql的my.cnf如下


[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
port       = 3306
socket     = /usr/local/mysql/mysql.sock
[mysqld]
port       = 3306
user       = mysql
socket     = /usr/local/mysql/mysql.sock
# 设置mysql的安装目录
basedir    = /usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir    = /usr/local/mysql/data
#配置主节点信息
server_id=3306
log-bin    = /usr/local/mysql/data/mysql-bin
log-bin=mysql-bin
#选择row模式 
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=test
#不同步mysql系统数据库
binlog-ignore-db=mysql
#配置主节点信息结束
#设置mysql数据库的日志及进程数据的存放目录
log-error =/usr/local/mysql/logs/mysql-error.log
pid-file  =/usr/local/mysql/mysql.pid
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
##################以上要修改的########################
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
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid


7、初始化数据库


[root@bogon mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/


111.png


记住你的初始密码红框框冒号后面的  iBd5auJXgw+j


8、配置环境变量


[root@bogon mysql]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
export PATH
#生效
[root@bogon mysql]# source /etc/profile


9、添加到服务设置开机启动


[root@bogon mysql]# cp support-files/mysql.server /etc/init.d/mysql
#授权
[root@bogon mysql]# chmod +x /etc/init.d/mysql 
#添加到开机启动
[root@bogon mysql]# chkconfig --add mysql
[root@bogon mysql]# chkconfig mysql on 
#检查是否成功
[root@bogon mysql]# chkconfig --list


10、启动


[root@bogon mysql]# service mysql start
#相应的命令
{start|stop|restart|reload|force-reload|status}


11、登录数据库


1. #输入刚才的密码
2. [root@localhost mysql]# mysql -u root -p
3. Enter password:


12、修改密码设置远程连接


#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY 'root';
flush privileges;
#创建任意远程连接
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
flush privileges;
#为root账户授权所有数据库所有权限
grant all  on *.*  to root;
flush privileges;


注意:log-error =/usr/local/mysql/logs/mysql-error.log


这个文件我是手动创建的,创建完成之后,重新授权给mysql用户,如果安装过程出错,请记得看错误日志!!!


navicat连接时请关闭防火墙或者开放3306端口。


#创建错误日志文件
[root@localhost mysql]# touch /usr/local/mysql/logs/mysql-error.log
#重新授权
[root@bogon ~]# chown -R mysql.mysql /usr/local/mysql/


二、Docker方式


1、拉取镜像


[root@localhost mysql]# docker pull mysql


2、创建挂载文件


[root@localhost mysql]# mkdir -p /data/mysql/conf


3、配置文件my.cnf


[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
socket     = /data/mysql/mysql.sock
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
#主节点
#配置主节点信息
server_id=1001
log-bin=mysql-bin
#选择row模式 
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=test
#不同步mysql系统数据库
binlog-ignore-db=mysql
#配置主节点信息结束
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
##################以上要修改的########################
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


4、创建Docker容器


docker run \
--privileged=true \
--restart=always \
-p 3306:3306 --name mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest


此时已经可以navicat连接了,如果连不上请继续往下。


5、配置远程连接


#进入容器
[root@bogon log]# docker container exec -it mysql /bin/bash
#配置远程访问
root@4d5306b674f7:/# mysql -uroot -p
#然后输入密码root
#创建任意远程连接
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
flush privileges;
#为root账户授权所有数据库所有权限
grant all  on *.*  to root;
flush privileges;


111.png


三、主从复制


原理简单描述


master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中。

slave服务器会定时对master二进制日志询问是否发生改变,如果发生改变,则开始一个I/O线程请求master二进制事件。

同时master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志(relay-log)中,从节点将启动IO线程从中继日志中读取二进制日志,然后SQL线程执行解析后的sql语句。

以Docker安装方式为例


1、配置主服务器my.cnf的[mysqld]下添加


#主节点
server_id  = 1001
log-bin    = mysql-bin
#选择row模式 
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=test
#不同步mysql系统数据库
binlog-ignore-db=mysql


查看


show variables like '%server_id%';


222.png


2、 配置slave的配置文件


1. 
2. #在/data/mysql下创建salve的配置文件文件
3. [root@bogon mysql]# mkdir -p /data/mysql/slave/conf


从节点my.cnf配置文件


[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
#从节点
server_id  = 1002
log-bin    = mysql-bin
#选择row模式
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行 
replicate-do-db=test
#不同步mysql系统数据库
replicate-ignore-db=mysql
#只读 只对非root用户有效
read-only=1
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
##################以上要修改的########################
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


3、启动从节点


docker run \
--privileged=true \
--restart=always \
-p 33060:3306 --name mysql-slave \
-v /data/mysql/slave/data:/var/lib/mysql \
-v /data/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest


4、开始同步数据


在主节点执行sql


show master status;


333.png


在从节点上执行如下sql


CHANGE MASTER TO master_host = '192.168.139.159',
master_user = 'root',
master_password = 'root',
master_log_file = 'mysql-bin.000003',
master_log_pos = 364;


然后从节点执行如下sql


#开始同步
start slave;
#停止
STOP SLAVE;
#查看同步状态
SHOW SLAVE STATUS;


到此结束


参考:https://blog.csdn.net/u010565545/article/details/104961184



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
2天前
|
安全 Linux 网络安全
Linux环境中安装和使用Paramiko
Linux环境中安装和使用Paramiko
24 12
|
1天前
|
Ubuntu Linux 数据安全/隐私保护
Linux的安装过程
Linux的安装过程
10 4
|
2天前
|
Linux 定位技术 虚拟化
Linux 安装
Linux 安装
11 5
|
1天前
|
Docker 容器
利用Docker Compose优化开发环境的配置
在现代软件开发中,环境一致性至关重要。开发人员常需在不同机器间复制环境配置,而Docker Compose提供了一种简便有效的方法来定义和运行多容器Docker应用程序,确保开发、测试和生产环境一致,简化团队协作,提高开发效率。通过YAML文件配置服务、网络和卷,使用简单命令即可启动和停止服务。本文将介绍Docker Compose的核心优势、基本使用方法及高级功能,帮助你更好地管理和优化开发环境。
|
9天前
|
数据采集 中间件 关系型数据库
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
25 2
|
22天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
24天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
176 11
|
2月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
19天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
59 13
MySQL的安装&数据库的简单操作