主从配置操作步骤摘要:
Master 上的配置
1.安装数据库;
2.修改数据库配置文件, 指明 server_id, 开启二进制日志(log-bin);
3.启动数据库, 查看当前是哪个日志, position 号是多少;
4.登录数据库, 授权数据复制用户(IP 地址为从机 IP 地址, 如果是双向主从, 这里的还需要授权本机的 IP 地址,
此时自己的 IP 地址就是从 IP 地址);
5.备份数据库(记得加锁和解锁);
6.传送备份数据到 Slave 上;
7.启动数据库;
#以下步骤, 为单向主从搭建成功, 想搭建双向主从需要的步骤:
1.登录数据库, 指定 Master 的地址、 用户、 密码等信息(此步仅双向主从时需要);
2.开启同步, 查看状态;
------------------------------------------------------------------------------------------
Slave 上的配置
1.安装数据库;
2.修改数据库配置文件, 指明 server_id(如果是搭建双向主从的话, 也要开启二进制 日志 log-bin);
3.启动数据库, 还原备份;
4.查看当前是哪个日志, position 号是多少(单向主从此步不需要, 双向主从需要);
5.指定 Master 的地址、 用户、 密码等信息;
6.开启同步, 查看状态。
1.执行dnf install mysql-server
yum install mysql-server -y
编辑配置文件vi /etc/my.cnf,参考如下配置:
[mysqld]
port = 3306
basedir = /var/lib/mysql #根据主机磁盘情况,自行设定
datadir = /var/lib/mysql #根据主机磁盘情况,自行设定
pid-file = /run/mysqld/mysqld.pid
socket = /var/lib/mysql/mysql.sock
log-bin=mysql-bin
secure-file-priv= /var/lib/mysql-files
lower_case_table_names = 1 #大小写设置,系统变量lower_case_table_names有三个值:分别是0、1、2
character-set-server=utf8mb4
max_allowed_packet=100M #最大包大小
innodb_log_file_size = 512M #日志大小
innodb_strict_mode = 0 #关闭严格模式
log_bin_trust_function_creators=1 #允许函数创建
collation-server=utf8mb4_unicode_ci
max_connections=1500
max_connect_errors=100
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password #密码验证方式
wait_timeout = 1800
interactive_timeout = 1800
#lock_wait_timeout = 3600
#tmp_table_size = 64M
#max_heap_table_size = 64M
#sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
sql_mode=NO_ENGINE_SUBSTITUTION
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1
# 不同步哪些数据库,自行配置
#binlog-ignore-db = mysql
#binlog-ignore-db = test
#binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步,自行配置
#binlog-do-db = game
[mysql]
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4
2.停止mysql,并初始化数据库,并查看初始默认密码,如图:
systemctl stop mysqld
#删除默认初始安装存在的文件
rm -rf /var/lib/mysql/* #将在下一步操作重新根据自定义配置生成初始数据
mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql #见图三
systemctl start mysqld
systemctl status mysqld
3.将MYSQL服务加入开机启动
systemctl enable mysqld
4.更改数据库的root本地密码,并创建业务用户及设置密码,如下图:
#新安装MYSQL,使用ROOT用户登陆,密码见图三
mysql -uroot -p
#将123456 替换成自己的密码,此为本地用户,只能修改密码
alter user 'root'@'localhost' identified by '123456'; #此处localhost不能修改,否则会报错
#刷新权限表
flush privileges;
#创建业务上自行要用的数据库用户,并设置密码
create user 'test'@'%' identified by '123456'; #test替换为业务用户,123456替换自行设定的密码
#对test用户进行连接授权,%更换为需要连接的主机IP或者网段如:192.168.0.0
grant all privileges on *.* to 'test'@'%' with grant option; #此处*.*可根据情况设置,尽量授权最小化
#再次刷新权限表
flush privileges;
图一:
图二:
5.登陆mysql验证,如图三:
图三:
6.创建用于复制操作的用户
在主节点创建一个用户,用于从节点链接主节点时使用。注意user是主服务器的用户,而10.xxx.xxx.xxx指的是从数据库的服务器IP,意思就是让从服务器有访问的权限
#限制访问来源的CIDR,如:10.xxx.xxx.xxx
CREATE USER 'user'@'10.xxx.xxx.xxx' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'user'@'10.xxx.xxx.xxx';
#刷新授权表信息
flush privileges;
7.获取主节点当前binary log文件名和位置(position),如图四:
图四:
8.在从(Slave)节点上设置主节点参数
CHANGE MASTER TO MASTER_HOST='10.xxx.xxx.xxx', -- 主服务器IP
MASTER_USER='epel', -- 主服务器用户
MASTER_PASSWORD='123456', -- 主服务器用户密码
MASTER_LOG_FILE='binlog.000006', -- 主服务器
MASTER_PORT=12345, -- 端口号默认3306
MASTER_LOG_POS=856; -- 位置
9.查看(Slave)主从同步状态
show slave status\G;
10.开启主从同步
start slave;
11.再次查看主从同步状态
show slave status\G;
Docker/Containerd Mysql8.0.23 部署
1.Mysql配置文件同手动部署,可直接复制
2.拉取mysql8容器镜像
docker pull cmc-tcr.tencentcloudcr.com/ops/mysql:8.0
3.启动容器,运行MYSQL8
docker run -d -p 3306:3306 --restart=always --privileged=true \
-v /数据库服务器目录/data:/var/lib/mysql \
-v /数据库服务器目录/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD='替换为数据库连接密码' \
--name mysql8.0 mysql:8.0 \
--lower_case_table_names=1 \ #忽略大小写
--default_authentication_plugin=mysql_native_password #密码验证方式
4.登陆数据库进行后续主从配置(参照手动配置)
Mysql5.7 部署(Anolis OS8.6)
⭐1. 添加 MySQL 官方Yum 存储库,选择并下载发布包
#MYSQL官方下载地址:
#https://dev.mysql.com/downloads/repo/yum/
wget https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
⭐2.选择MySQL安装版本
查看版本库(对于启用 dnf 的系统, 将命令中的 yum替换为dnf,命令如下:)
dnf repolist all | grep mysql
yum repolist all | grep mysql
⭐3.修改默认安装mysql80为mysql57,禁用mysql80
修改方式如下:
#yum修改方式,如图
yum install -y yum-utils
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
或
#dnf修改方式,如图
sudo dnf config-manager --disable mysql80-community
sudo dnf config-manager --enable mysql57-community
此时MySQL已由默认安装80更改为57,如图:
⭐4.禁用默认 MySQL 模块
(仅限 EL8 系统)基于 EL8 的系统(例如 RHEL8 和 Oracle Linux 8)包含默认启用的 MySQL 模块。除非禁用此模块,否则它会屏蔽 MySQL 存储库提供的包。要禁用包含的模块并使 MySQL 存储库包可见,请使用以下命令(对于启用 dnf 的系统, 将命令中的 yum替换为dnf)
sudo yum module disable mysql
或
sudo dnf module disable mysql
⭐5.安装MySQL57
sudo yum install -y mysql-community-server mysql-community-client
⭐6.配置MySQL
使用文档库中的MySQL 5.7配置文件,注意read_only参数默认设置为1,启动后续设置为0或默认设置成0。
安装完成并启动服务后在/var/log/mysqld.log文件中生成了一个随机的默认密码,使用以下命令查看默认的登录密码,首次登陆后请修改密码。
more /var/log/mysqld.log
more /var/log/mysqld.log|grep password|awk -F'localhost:' '{print $NF}'
⭐7.修改默认配置,并启动MySQL
⭐⭐⭐⭐⭐MySQL yum安装默认配置文件路径为/etc/my.cnf,并修改数据库存储目录。
[mysqld]
#Server
port = 3306
skip-name-resolve
lower_case_table_names = 1
max_connections = 3000
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 256M
table_open_cache = 256
sort_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 300
query_cache_size= 16M
innodb_file_format = Barracuda
innodb_file_format_check = ON
innodb_default_row_format=dynamic
character-set-server = utf8
init_connect = 'SET NAMES utf8'
###注意更换data目录###
datadir = /data/mysql
socket = /var/lib/mysql/mysql.sock
read_only = 1
default-storage-engine = InnoDB
innodb_buffer_pool_size = 2G
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_large_prefix = 1
innodb_file_format = BARRACUDA
log-bin-trust-function-creators = 1
#REPLICATION
slave_net_timeout = 30
#注意更换主从同步的server-id,注意唯一
server-id = 2
log-bin = mysql-bin
binlog_format = ROW
replicate-wild-ignore-table = mysql.%
auto-increment-increment = 4
auto-increment-offset = 2
master_info_repository = TABLE
expire_logs_days = 3
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = true
relay_log_info_repository = TABLE
relay_log_recovery = ON
skip_slave_start=1
log_bin_trust_function_creators=1
#SQL Audit
#server_audit_logging = on
#plugin-load=server_audit=server_audit.so
#server_audit_file_path = /data/sqlaudit
#server_audit = FORCE_PLUS_PERMANENT
#Slow Queries
slow_query_log=1
long_query_time=1
symbolic-links = 0
sql_mode = STRICT_ALL_TABLES,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
设置MySQL开机启动
systemctl enable mysqld
systemctl start mysqld
#复制输出结果
grep generated /var/log/mysqld.log | awk -F": " '{print $NF}'
⭐8.设置密码
#回车后键入上一步复制的密码
mysql -uroot -p
set password=password('Newmed!@s0bey');
#授权新用户,这个仅仅是示例,具体账号密码要求参考事业部给出的文档
GRANT ALL ON *.* TO 'mysql'@'%' IDENTIFIED BY 'hqy-webtv';
FLUSH PRIVILEGES;
⭐⭐⭐⭐⭐MySQL 安全授权访问设置建议用如下示例规范:
—->
#单个IP grant all privileges on *.* to root@'192.168.1.3' identified by '123' with grant option; flush privileges; #IP段,使用%代替IP grant all privileges on *.* to root@'192.168.1.%' identified by '123' with grant option; or grant all privileges on *.* to root@'192.168.%.%' identified by '123' with grant option; flush privileges;