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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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
相关文章
|
19天前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
22天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
184 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
6天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
14 1
|
8天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
9天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
45 2
|
13天前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
34 2
|
13天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
23天前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
73 1
|
24天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
55 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
6月前
|
Linux Docker 容器
Linux安装docker以及配置镜像加速
Linux安装docker以及配置镜像加速
622 0