前言
MySQL 基于GID 的一主两从| 修改虚拟机uuid |修改MySQLuuid| 主从复制的一些概念| MySQL 配置GID 模式的一主一从 |使用NTP来进行集群时间同步|本文章已上全站总榜|_mysql主从修改网卡uuid-CSDN博客文章浏览阅读2.2k次,点赞62次,收藏48次。本文章已上全站总榜 MySQL 配置基于GID 模式的一主两从 修改虚拟机uuid 修改MySQL uuid 主从复制的一些概念 MySQL 配置基于GID 模式的一主一从 NTP 来进行时间同步,同步集群时间 _mysql主从修改网卡uuidhttps://blog.csdn.net/qq_61414097/article/details/141358827?spm=1001.2014.3001.5502
MySQL主主复制
用两台centos7 主机名和ip分别为 是 s1 10.8.165.8 和s2 10.8.165.9 的 机器
mysql使用yum安装好了 做mysql 主主binlog 同步复制 怎么做?
在CentOS 7上设置MySQL主主(Master-Master)复制涉及多个步骤,包括配置MySQL主服务器、启用二进制日志(binlog)、设置用户权限、以及配置复制进程。以下是详细步骤:
1. 安装MySQL
假设已经使用`yum`安装好了MySQL。如果还没有安装,
rpm 包放在 opt下 在rpm 所在文件夹里面 使用脚本 脚本存于我的G盘
脚本内容如下,,,
#!/bin/bash
#
# 作者: lwq
# 日期: 2023-10-10
# 邮箱:xxxxx
# 代码注意事项: 确保以root用户或具有sudo权限的用户执行此脚本
# CentOS 7或RHEL 7系统上下载、安装并配置MySQL 5.7
# 错误处理函数
error_exit() {
echo "$1" 1>&2
exit 1
}
rm -rf mysql57-community-release-el7-11.noarch.rpm
rm -rf /var/log/mysqld.log
yum erase mariadb mariadb-server mariadb-libs mariadb-devel mysql -y
yum remove mysql-community-server mysql -y
yum remove mysql57-community-release-el7-11.noarch -y
# yum-utils
yum -y install yum-utils
rm -rf /var/lib/mysql
# 1. 检查 MySQL 5.7 YUM 存储库软件包是否已存在
if [ -f "mysql57-community-release-el7-11.noarch.rpm" ]; then
echo "MySQL 5.7 YUM 存储库软件包已存在,跳过下载步骤。"
else
echo "正在下载 MySQL 5.7 YUM 存储库软件包..."
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm || error_exit "下载 MySQL 5.7 存储库软件包失败。请检查脚本。"
fi
# 2. 安装YUM存储库软件包
if rpm -q mysql57-community-release-el7-11.noarch; then
echo "MySQL 5.7 YUM 存储库软件包已安装,跳过安装步骤。"
else
echo "正在安装 MySQL 5.7 YUM 存储库软件包..."
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm || error_exit "安装 MySQL 5.7 存储库软件包失败。"
fi
# 导入 GPG 密钥
#echo "正在导入 MySQL GPG 密钥..."
#sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 || error_exit "导入 #MySQL GPG 密钥失败。"
# 3. 修改 /etc/yum.repos.d/mysql-community.repo
echo "正在修改 /etc/yum.repos.d/mysql-community.repo 的 gpgcheck 配置..."
sudo sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/mysql-community.repo || error_exit "修改 /etc/yum.repos.d/mysql-community.repo 失败。"
# 4. 修改 /etc/yum.repos.d/mysql-community-source.repo
echo "正在修改 /etc/yum.repos.d/mysql-community-source.repo 的 gpgcheck 配置..."
sudo sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/mysql-community-source.repo || error_exit "修改 /etc/yum.repos.d/mysql-community-source.repo 失败。"
# 5. 安装MySQL 5.7
echo "正在安装 MySQL 5.7..."
yum install mysql-community-{server,client,common,libs}-* --skip-broken -y ||error_exit "安装 MySQL 5.7 失败。"
# 6. 启动并配置MySQL服务
echo "正在启动 MySQL 服务..."
sudo systemctl restart mysqld || error_exit "启动 MySQL 服务失败。"
echo "正在设置 MySQL 服务开机自启动..."
sudo systemctl enable mysqld || error_exit "设置 MySQL 服务开机自启动失败。"
# 获取临时密码,使用 grep 'password' /var/log/mysqld.log
echo "MySQL 安装完成, 查看MySQL当前用户名和临时密码 如下 "
echo " ---------------------------------------------------"
temp_user=$(grep 'temporary password' /var/log/mysqld.log | awk -F'for ' '{print $2}' | awk -F'@' '{print $1}')
echo "用户是:$temp_user"
temp_password=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
echo "临时密码: $temp_password"
echo " -----------------------------------------------------"
echo "请使用临时密码登录 MySQL 并更改密码。"
# 提示用户如何登录并更改密码
echo "您可以使用如下命令登录 MySQL:"
echo "mysql -u用户名 -p"
echo "登录后请使用以下命令更改密码:"
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';"
echo "比如:ALTER USER 'root'@'localhost' IDENTIFIED BY 'Test@123456.';"
echo "# 放宽密码策略再修改为简单密码"
echo "注:实验环境下,项目上线需恢复密码复杂策略。mysql -u root -p "
echo "SHOW VARIABLES LIKE 'validate_password%';"
echo "SET GLOBAL validate_password_policy = LOW;"
echo "SET GLOBAL validate_password_length=6;"
echo "ALTER USER 'root'@'你的主机名或ip' IDENTIFIED BY '123456';"
echo “FLUSH PRIVILEGES;”
echo "注:此脚本是先准备好rpm安装包,再yum安装"
echo "# 恢复密码复杂策略"
echo "SET GLOBAL validate_password_policy = MEDIUM;"
echo "SET GLOBAL validate_password_length = 8;"
echo " ------------------------------------------------------------------------------------------"
echo "设置远程权限:"
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'指定主机ip 或任何IP 设为%' IDENTIFIED BY '123456';"
echo " 执行 mysql -uroot -p123456 -e 'SELECT VERSION();' "
# 以上步骤自动化执行结果如下
temp_user=$(grep 'temporary password' /var/log/mysqld.log | awk -F'for ' '{print $2}' | awk -F'@' '{print $1}')
temp_password=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
echo "临时密码: $temp_password"
cat >>/etc/my.cnf <<EOF
validate_password=off
EOF
# 重启MySQL服务
systemctl restart mysqld
# 更改MySQL root用户密码
mysqladmin -u"$temp_user" -p"$temp_password" password '123456'
# 清屏
clear
# 检查上一个命令是否成功执行
if [ $? -eq 0 ]; then
echo "mysql密码更改成功,密码是 123456"
echo "请手动执行source /etc/profile"
else
echo "密码更改不成功"
exit 1
fi
性能调优
mysql.cnf 脚本rpm安装mysql 后 性能优化
注意: 原本配置重命名做备份 这个直接新建 my.cnf
配置直接粘进去
尽管log-bin 和 log_bin 都可以启用二进制日志,但为了保持与现代MySQL版本的兼容性和一致性,推荐使用log_bin这种写法。
保存退出:
sudo systemctl stop mysqld
# 备份数据
sudo cp -r /var/lib/mysql /var/lib/mysql_backup
sudo rm /var/lib/mysql/ib_logfile0
sudo rm /var/lib/mysql/ib_logfile1
sudo systemctl start mysqld
为啥启动服务之前删文件?
修改innodb_log_file_size 后,如果 MySQL 服务无法启动,通常是由于旧的 InnoDB 日志文件大小与新的配置不匹配。为了让 MySQL 能够正确启动,可能需要手动删除旧的 InnoDB 日志文件
# 停止 MySQL 服务
sudo systemctl stop mysqld
# 备份数据
sudo cp -r /var/lib/mysql /var/lib/mysql_backup
# 删除旧的 InnoDB 日志文件
sudo rm /var/lib/mysql/ib_logfile0
sudo rm /var/lib/mysql/ib_logfile1
# 启动 MySQL 服务
sudo systemctl start mysqld
# 检查 MySQL 服务状态
sudo systemctl status mysqld
# 检查日志文件
tail -f /var/log/mysqld.log
[client]
port=3306
default-character-set=utf8mb4
[mysqld]
port=3306
basedir=/usr
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# General settings
max_connections=200
character-set-server=utf8mb4
default-storage-engine=INNODB
explicit_defaults_for_timestamp=true
server-id=1
# InnoDB 引擎优化
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
# 缓存配置
query_cache_size=64M
# query_cache_limit=2M
# 报错日志和慢查询日志配置
slow_query_log=1
slow_query_log_file=/var/log/mysql_slow.log
long_query_time=2
# 其他优化
max_allowed_packet=64M
table_open_cache=400
thread_cache_size=20
# 启用二进制日志
log_bin=/var/lib/mysql/mysql-bin
log_bin-index=/var/lib/mysql/mysql-bin.index
expire_logs_days=10
max_binlog_size=100M
binlog_format=ROW
MySQL主主配置
我在上面 性能调优 中 已经配置好 my.cnf在它的基础上配置MySQL主主
2. 配置主服务器(s1 和 s2)
在每台服务器上编辑MySQL配置文件`/etc/my.cnf`,添加如下内容:
尽管log-bin 和 log_bin 都可以启用二进制日志,但为了保持与现代MySQL版本的兼容性和一致性,推荐使用log_bin。
s1 (10.8.165.8)
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = row
auto_increment_increment = 2
auto_increment_offset = 1
relay_log = /var/log/mysql/mysql-relay-bin.log
log_slave_updates = 1
注意:以上七条 若服务起不来 先添加两条。
server-id=1
log-bin=/var/log/mysqlbin/bin-log
上面是通用写法,我个人写法如下:
# 配置主主第2台 log_bin 和binlog_format 已在性能调优开启 所以主主配置参数如下:
server-id = 1
auto_increment_increment = 2
auto_increment_offset = 1
relay_log = /var/log/mysql/mysql-relay-bin.log
log_slave_updates = 1
s2 (10.8.165.9)
[mysqld]
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = row
auto_increment_increment = 2
auto_increment_offset = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_slave_updates = 1
# 配置主主第2台log_bin 和binlog_format 已在性能调优开启 所以主主配置参数如下:
server-id = 2
auto_increment_increment = 2
auto_increment_offset = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_slave_updates = 1
3. 重启MySQL服务
在两台服务器上重启MySQL服务以应用配置:
sudo systemctl restart mysqld
4. 配置复制用户
在两台服务器上分别登录MySQL,并创建用于复制的用户:
注意 我是使用脚本 执行 创建的MySQL
mysql -uroot -p
如果密码输入123456 报错,那么
Test@123456.
试试 这是初始密码可以登进去 ,可能 配置/etc/my.cnf 把密码重置了
SET GLOBAL validate_password_policy = LOW;
SET GLOBAL validate_password_length=6;
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
SELECT User, Host FROM mysql.user WHERE User='root';
+------+-----------+
| User | Host |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)
DROP USER 'root'@'localhost';
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
如果不存在 root % 则创建。
create USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
###首先,授予REPLICATION SLAVE权限 s授予 管理员ALL PRIVILEGES 权限 % 表示用户root可以是任意IP
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
在s1 (10.8.165.8)
```sql
CREATE USER 'tom '@' 10.8.165.9' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'tom'@'10.8.165.9' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'tom'@'10.8.165.9';
FLUSH PRIVILEGES;
quit
在s2 (10.8.165.9)
```sql
CREATE USER 'tom '@' 10.8.165.8' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'tom'@'10.8.165.8' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'tom'@'10.8.165.8';
FLUSH PRIVILEGES;
quit
5. 获取二进制日志文件名和位置
在两台服务器上执行以下命令来获取当前的二进制日志文件名和位置:
在s1 (10.8.165.8)
```sql
SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 3157 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
在s2 (10.8.165.9)
```sql
SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 2252 | | | |
+------------------+----------+--------------+------------------+-------------------+
记录下`File`和`Position`字段的值。
6. 配置主主复制
在两台服务器上分别配置对方为其从服务器:
注意在做之前需要修改文件权限
MASTER_LOG_POS=’2252’;句子中, 2252 不加引号
sudo chown -R mysql:mysql /var/log/mysql/
sudo chmod -R 755 /var/log/mysql/
不然报错如下:
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.8.165.9',
-> MASTER_USER='tom',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000002',
-> MASTER_LOG_POS=’2252’;
ERROR 29 (HY000): File '/var/log/mysql/mysql-relay-bin.index' not found (Errcode: 13 - Permission denied)
RROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2252'' at line 6
在s1 (10.8.165.8)
```sql
CHANGE MASTER TO
MASTER_HOST='10.8.165.9',
MASTER_USER='tom',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='s2_log_file',
MASTER_LOG_POS=s2_log_pos;
START SLAVE;
将`s2_log_file`和`s2_log_pos`替换为从s2获取的日志文件名和位置 比如我的是mysql-bin.000002 。
在s2 (10.8.165.9)
```sql
CHANGE MASTER TO
MASTER_HOST='10.8.165.8',
MASTER_USER='tom',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=3157;
START SLAVE;
将`s1_log_file`和`s1_log_pos`替换为从s1获取的日志文件名和位置。
7. 验证复制状态
在两台服务器上分别执行以下命令来检查复制是否成功:
```sql
SHOW SLAVE STATUS\G;
确保`Slave_IO_Running`和`Slave_SQL_Running`字段的值都是`Yes`。
注意事项
- 确保防火墙允许MySQL服务端口(默认是3306)在两台服务器之间通信。
- 确保两台服务器的时间同步,使用NTP服务同步时间。
- 在进行任何操作前,备份您的数据库以防数据丢失。
通过以上步骤,成功配置MySQL的主主(Master-Master)复制。
注意:
如果报错单词为:正在连接,
可以等一会儿, 然后关闭再开启slave,多试几次。
START SLAVE;
SHOW SLAVE STATUS\G;
STOP SLAVE;
MySQL 主主 -binlog配置完成
补充: 大部分人应该用不到:
配MySQL主主后 额外添加一个新节点配置 3主。
: 下面是将新节点添加到该配置的步骤。
步骤 1:安装 MySQL
在 10.8.165.26 上安装 MySQL。首先,确保您的系统是最新的,并安装必要的包:
sudo yum update -y # 此步骤可以跳过 因为更新后系统会很卡
sudo yum install -y epel-release
sudo yum install -y mysql-server
步骤 2:启动 MySQL 服务
安装完成后,启动 MySQL 服务并设置为开机自启:
sudo systemctl start mysqld
sudo systemctl enable mysqld
步骤 3:获取初始密码
MySQL 安装后会生成一个临时密码,您可以通过查看日志文件来获取它:
sudo grep 'temporary password' /var/log/mysqld.log
记下这个临时密码,以便后续登录。
步骤 4:安全配置
使用临时密码登录 MySQL,并执行安全配置脚本:
mysql -u root -p
输入刚才获取的临时密码。
然后,运行以下命令来增强 MySQL 的安全性:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword'; -- 修改 root 密码DELETE FROM mysql.user WHERE User=''; -- 删除空用户DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; -- 删除远程 root 用户DROP DATABASE IF EXISTS test; -- 删除 test 数据库
FLUSH PRIVILEGES; -- 刷新权限
步骤 5:配置主主复制
1.在 10.8.165.26 上配置复制:
首先,编辑 MySQL 配置文件 /etc/my.cnf,确保有以下内容:
[mysqld]server-id=3 # 确保每个节点都有唯一的 server-idlog_bin=mysql-binbinlog_format=mixed
1.重启 MySQL 服务:
sudo systemctl restart mysqld
1.创建复制用户:
在 10.8.165.26 上创建一个用于复制的用户(例如 replication_user)并授予权限:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'YourReplicationPassword';GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
1.获取当前二进制日志文件和位置:
在 10.8.165.8 和 10.8.165.9 中执行以下命令,以获取当前的二进制日志文件和位置:
SHOW MASTER STATUS;
记下 File 和 Position 的值。
1.在 10.8.165.26 上配置主节点:
在 10.8.165.26 上执行以下命令,指定两个主节点的连接信息(替换为实际的 IP 和位置):
CHANGE MASTER TO
MASTER_HOST='10.8.165.8',
MASTER_USER='replication_user',
MASTER_PASSWORD='YourReplicationPassword',
MASTER_LOG_FILE='mysql-bin.000001', -- 使用从第4步获得的值
MASTER_LOG_POS=123; -- 使用从第4步获得的值
START SLAVE; -- 启动复制
重复以上步骤,将 10.8.165.9 添加为另一个主节点。
步骤 6:验证复制状态
使用以下命令检查复制状态,确保没有错误:
SHOW SLAVE STATUS\G;
确认 Slave_IO_Running 和 Slave_SQL_Running 都显示为 Yes。
总结
通过上述步骤,已成功在 IP 为 10.8.165.26/24 的服务器上安装了 MySQL,并将其添加到主主复制配置中。确保在所有节点之间保持网络连接并监控 MySQL 的运行状态。