使用脚本自动搭建MySQL主从

使用脚本配置两台服务器自动搭建MySQL主从

说明:两台机器ip为192.168.221.103、192.168.221.104 MySQL使用二进制的方式安装,并且配置为系统服务因为后面需要重启systemctl restart mysql,

配置文件在文章后面。

脚本内容:

#!/bin/bash


#前提/etc/hosts文件中需要有如下配置
#192.168.221.103 data-master-node
#192.168.221.104 data-slave-node
#MySQL安装路径
path=/data/app/mysql

#判断当前机器是否为master节点
is_master=$(ip a | grep "$(grep 'data-master-node' /etc/hosts | awk '{print $1}')")
slave_ip=$(cat /etc/hosts|grep data-slave-node|awk '{print $1}')
master_ip=$(cat /etc/hosts|grep data-master-node|awk '{print $1}')

if [ -n "$is_master" ]; then
#主节点先休眠10秒,等待从节点修改server-id
sleep 10

#创建用户
"$path"/bin/mysql -u jialve -S "$path"/mysql.sock -e "
CREATE USER "repl"@"$slave_ip" IDENTIFIED BY 'JiaLve123!';
grant replication slave on *.* to "repl"@"$slave_ip";
"

#查看master节点状态
"$path"/bin/mysql -u jialve -S "$path"/mysql.sock -e "show master status;" > master.txt

master_file=$(cat master.txt|awk 'NR==2 {print $1}')
master_Position=$(cat master.txt|awk 'NR==2 {print $2}')

#登录到从节点MySQL服务
sql_query="CHANGE MASTER TO MASTER_HOST='$master_ip', MASTER_USER='repl', MASTER_PASSWORD='JiaLve123!', MASTER_PORT=3303, MASTER_LOG_FILE='$master_file', MASTER_LOG_POS=$master_Position,get_master_public_key=1"
echo "从节点执行的sql为:$sql_query"

"$path"/bin/mysql -u jialve -h "$slave_ip" -P 3303 -S "$path"/mysql.sock -e "$sql_query;start slave;"

else 
    #修改从节点server-id配置
    sed -i 's/server-id=1/server-id=2/g' "$path"/my.cnf
    #重启mysql服务
    systemctl restart mysql
fi

MySQL配置文件

[client]
port=3303
default-character-set = utf8mb4
socket=/data/app/mysql/mysql.sock
[mysql]
default-character-set = utf8mb4
socket=/data/app/mysql/mysql.sock
[mysqld]
port=3303
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
symbolic-links=0
log-error=/data/app/mysql/log/mysqld.log
pid-file=/data/app/mysql/mysqld.pid
max_connections=10000
socket=/data/app/mysql/mysql.sock
datadir=/data/app/data/mysql/data
log-bin=/data/app/mysql/log-bin/mysql-bin
expire-logs-days=14
max-binlog-size=500M
server-id=1
# 指定主从复制的数据库
replicate-do-db=ourea
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT

# 开启慢查询日志
slow_query_log = ON
# 慢查询日志存放路径
slow_query_log_file = /data/app/mysql/log/ecs-sensorsdata-slow.log
# 超过5秒的查询,记录到慢查询日志,默认值10
long_query_time = 5

# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size = 1M

# InnoDB#
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 缓存池
innodb_buffer_pool_size=4G

# 顺序读缓冲区大小,connection级参数,该参数对应的分配内存是每连接独享。对表进行顺序扫描的请求将分配一个读入缓冲区
read_buffer_size = 160M

# 排序缓冲区大小,connection级参数,默认大小为2MB。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引,其次可以尝试增大该值
sort_buffer_size = 128M

# 联合查询缓冲区大小,connection级参数,该参数对应的分配内存是每连接独享
join_buffer_size = 320M

#这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,#如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,
#增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值)#根据物理内存设置规则如下:
#1G —> 8#2G —> 16#3G —> 32#大于3G —> 64
thread_cache_size = 16

# 批量插入数据缓存大小,可以有效提高插入效率,默认为8M
bulk_insert_buffer_size = 64M
innodb_lock_wait_timeout=500
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的监控MySQL主从同步状态脚本的示例: ``` #!/bin/bash # MySQL主从同步状态监控脚本 # MySQL连接信息 MYSQL_HOST="localhost" MYSQL_PORT="3306" MYSQL_USER="root" MYSQL_PASSWORD="password" # 检查间隔时间(秒) CHECK_INTERVAL=10 # 报警阈值(秒) ALERT_THRESHOLD=60 # 报警通知邮箱 ALERT_EMAIL="[email protected]" # 检查主从同步状态 function check_slave_status() { # 连接MySQL,执行show slave status命令,获取主从同步状态 slave_status=$(mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "show slave status\G") # 解析主从同步状态 slave_io_running=$(echo "$slave_status" | grep -w "Slave_IO_Running:" | awk '{print $2}') slave_sql_running=$(echo "$slave_status" | grep -w "Slave_SQL_Running:" | awk '{print $2}') seconds_behind_master=$(echo "$slave_status" | grep -w "Seconds_Behind_Master:" | awk '{print $2}') # 判断主从同步状态是否正常 if [[ "$slave_io_running" == "Yes" && "$slave_sql_running" == "Yes" && "$seconds_behind_master" -lt "$ALERT_THRESHOLD" ]]; then echo "MySQL主从同步状态正常,Seconds_Behind_Master: $seconds_behind_master" else echo "MySQL主从同步状态异常,Slave_IO_Running: $slave_io_running, Slave_SQL_Running: $slave_sql_running, Seconds_Behind_Master: $seconds_behind_master" # 发送报警邮件 echo "MySQL主从同步状态异常,请尽快处理!" | mail -s "MySQL主从同步状态异常" $ALERT_EMAIL fi } # 循环检查主从同步状态 while true; do check_slave_status sleep $CHECK_INTERVAL done ``` 该脚本会定期执行show slave status命令,获取主从同步状态,并判断同步状态是否正常。如果发现同步状态异常,则发送报警邮件通知DBA团队处理。可以根据实际情况修改脚本中的MySQL连接信息、报警阈值、报警通知邮箱等配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值