mysql的主从

配置文件都要改
/etc/my.cnf
[mysqld] 下要有这两句,server-id主从的不能相同,改完配置文件重启mysql :service mysqld restart
log-bin=mysql-bin
server-id=172
#log-slave-update #中转用的 可以不写

主库上
设置haoning这个用户的操作,都可以复制给从库
mysql -uroot
GRANT REPLICATION SLAVE ON *.* to 'haoning'@'%' identified by 'haoning';
flush privileges;

从库上测试
mysql -uhaoning -h 192.168.137.164 -phaoning
如果不通
在主库上iptables -F

在主库上
show master status

查看是哪个 master_log_file='mysql-bin.000003',master_log_pos=327


然后在slave上: 用root登陆
>change master to master_host='192.168.137.165',master_user='haohao',master_password='haohao', master_log_file='mysql-bin.000003',master_log_pos=327
;
如果这部报错,尝试stop slave再改
之后
start slave;
show slave status;


在主库上建表
从库上测试是否也建立了


主从配置过后,
如果想主从互换,
需要清空主从的配置
从库上
flush logs; 
stop slave;
reset slave;
#reset all slave;


再show slave status可能还是能看到内容
重启mysql就没了

查看是否为从库
show global status like 'Slave_running';


如果以上还是不好使,尝试更改server-id成其他的数字
### 获取当前服务器IP地址并配置MySQL主从复制 #### 获取当前服务器的IP地址 在Linux系统中,可以通过多种方式获取当前服务器的IP地址。以下是一些常用的方法: ##### 使用 `hostname` 命令获取IP地址 ```bash ip=$(hostname -I) echo "本机 IP 地址为:$ip" [^3] ``` ##### 使用 `ifconfig` 命令获取IP地址 ```bash ip=$(ifconfig | grep -E 'inet [0-9]' | awk '{print $2}') echo "本机 IP 地址为:$ip" [^3] ``` ##### 获取IP地址的最后一位 ```bash ip_last=$(ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:" | cut -d'.' -f4) echo "当前 IP 地址的最后一位为:$ip_last" [^4] ``` #### 配置MySQL主从复制 MySQL主从复制是一种常见的数据库高可用方案,主服务器将数据更改记录到二进制日志中,从服务器读取这些日志并在本地重放,从而实现数据同步。 ##### 在主服务器上配置复制用户 在主服务器上创建一个用于复制的用户,并授予相应的权限: ```bash docker exec -it ${master_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof grant replication slave on *.* to '${replication_user}'@'%' identified by '${mysql_passwd}'; eof" ``` 刷新权限以确保新创建的用户生效: ```bash docker exec -it ${master_name} /bin/bash -c "mysql -h${mysql_address} -P${master_port} -u${mysql_user} -p${mysql_passwd} -e 'flush privileges;'" ``` ##### 在从服务器上配置主服务器信息 在从服务器上执行以下命令,连接到主服务器并设置复制信息: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof change master to master_host='${master_ip}', master_user='${replication_user}', master_password='${mysql_passwd}', master_log_file='mysql-bin.000001', master_log_pos= 4; eof" ``` 启动从服务器的复制进程: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'start slave;'" ``` ##### 检查从服务器状态 可以通过以下命令检查从服务器的复制状态: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'show slave status\G'" ``` 确保输出中的 `Slave_IO_Running` 和 `Slave_SQL_Running` 状态为 `Yes`,表示复制正常运行。 #### 示例:完整配置流程 以下是一个完整的Shell脚本示例,展示了如何获取当前服务器的IP地址,并配置MySQL主从复制: ```bash #!/bin/bash # 获取当前服务器的IP地址 ip=$(hostname -I) # 主服务器和从服务器的名称 master_name="mysql-master" slave_name="mysql-slave" # MySQL相关参数 mysql_user="root" mysql_passwd="root_password" replication_user="replica_user" master_ip="192.168.1.100" # 主服务器IP地址 # 在主服务器上创建复制用户 docker exec -it ${master_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof grant replication slave on *.* to '${replication_user}'@'%' identified by '${mysql_passwd}'; flush privileges; eof" # 在从服务器上配置主服务器信息 docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof change master to master_host='${master_ip}', master_user='${replication_user}', master_password='${mysql_passwd}', master_log_file='mysql-bin.000001', master_log_pos=4; start slave; eof" # 检查从服务器状态 docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'show slave status\G'" ``` 通过上述步骤,可以实现MySQL主从复制的配置,并利用Shell脚本自动化相关操作。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值