设置服务器

[root@localhost bin]# cat ip.txt 
192.168.10.53 master
192.168.10.223 slave02
192.168.10.218 slave03
192.168.10.93 slave04

免密安装

[root@localhost bin]# cat autologin.sh 
#!/bin/bash
yum -y install sshpass
echo "Generate Keys ..."
ssh-keygen <<EOF




EOF

for ip in `cat ip.txt | awk '{print $1 }' `
do
    sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no $ip
    echo "$ip login without password success"
done

安装mysql 5.7

[root@localhost bin]# cat install-mysql.sh 
#!/bin/bash

if [ $# -lt 1 ] ; then
    exit 1
fi

ip=$1

echo "prepare mysql repository"
cat <<'EOF' >mysql.repo
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch
enabled=1
gpgcheck=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

EOF

scp -o 'StrictHostKeyChecking=no' mysql.repo root@$ip:/etc/yum.repos.d
ssh root@$ip <<'EOF'
yum -y install mysql-server net-tools wget 
systemctl start mysqld
sleep 1
password=`cat /var/log/mysqld.log | grep password |head -1 | awk '{print $NF}'`
echo "password is $password"
mysql -uroot  -p"$password" --connect-expired-password  -e " alter user root@localhost identified by '1qaz!QAZ' ; " 
EOF

设置初始化和主从复制

[root@localhost bin]# cat install-ms.sh 
#!/bin/bash
id=1
cat ip.txt |while read ip role
do
    echo "start to install mysql $ip : $role "  
    install-mysql.sh $ip

    if [ $role = "master" ] ; then
        hostip=$ip
        sed -i.bak "s/HOSTIP/$ip/g" slave.template.sh 
        scp master.template.sh root@$ip:/tmp
        ssh root@$ip <<-EOF
        chmod +x /tmp/master.template.sh
        /tmp/master.template.sh $id
        systemctl stop mysqld
        systemctl start mysqld
        EOF
        ssh root@ip <<-'EOF'
        mysql -uroot -p'1qaz!QAZ' -e " show master status;"
        EOF
    else
        scp slave.template.sh root@$ip:/tmp
        ssh root@$ip <<-EOF

        chmod +x /tmp/slave.template.sh
        /tmp/slave.template.sh $id
        systemctl stop mysqld
        systemctl start mysqld
        mysql -uroot -p'1qaz!QAZ' -e " show slave status\G"
        EOF
    fi
    ((id++))
done

运行模板

[root@localhost bin]# cat master.template.sh 
id=$1
sed -i '/server-id/d' /etc/my.cnf
sed -i '/log-bin/d' /etc/my.cnf

echo "server-id=$1" >> /etc/my.cnf
echo "log-bin=master" >> /etc/my.cnf

mysql -uroot -p'1qaz!QAZ' <<EOF
create user slave@'%' identified by '1qaz!QAZ';
grant replication slave,replication client on *.* to slave@'%';
flush privileges;
EOF
[root@localhost bin]# cat slave.template.sh
id=$1
sed -i '/server-id/d' /etc/my.cnf
echo "server-id=$id" >> /etc/my.cnf

mysql -uroot -p'1qaz!QAZ' <<EOF
stop slave;
reset slave;
change master to master_host='192.168.10.53',master_user='slave', master_password='1qaz!QAZ' ;
start s
作者:严锋  创建时间:2025-05-22 12:58
最后编辑:严锋  更新时间:2025-05-22 13:05