从0开始学运维~~~~
一:虚拟机克隆
我的机子主库为192.168.1.114,从库为192.168.1.115
192.168.1.114作为主库master
192.168.1.115作为从库 slave
二:配置主库的my.cnf(此文件在/etc/下,或者在源码中查找/data/mysql-8.0.28/packaging/rpm-common的my.cnf)
1:
添加:
server-id =1
log-bin =mysql-bin
退出保存
在主库上执行my.cnf到从库发送过去的命令
scp /etc/my.cnf 192.168.1.130:/etc/
yes
******
2:
然后修改从库的my.cnf
其它所有东西不变
修改server-id = 2(这个数字)
退出并保存
并且删除从库的/data/mysql/auto.cnf文件
3:
开启主从库的mysql服务
三:登录主库的mysql账号给slave创建账号并赋予权限
1:
登录主库的mysql
mysql -uroot -p
password:
为slave从库创建账号"tongbu"
CREATE USER 'tongbu'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
为账号添加权限
GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'%';
查看主库状态 show master status;
bin.000001日志记录之后的sql语句,并且在每执行一次sql语句之后 position点位都会发生改变 自己的file和position是什么 ,下面的指定主库信息就写什么。
四:从库配置
##先登录从库的mysql
1:制定主库信息
change master to
master_host='192.168.1.114',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=656;
2:启动从库
slave start;
3:查看从库状态信息
show slave status\G //不加分号哦
查看最重要的两个信息
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 只要都为yes就好了
至此主从配置完毕! 可以试着在主库添加sql语句,之后在从库检验查看。
五:Mysql优化
Mysql主从同步集群在生成环境使用过程中,如果主从服务器之间网络通信条件差或者数据库数据量非常大,容易导致MYSQL主从同步延迟。
MYSQL主从产生延迟之后,一旦主库宕机,会导致部分数据没有及时同步至丛库,重新启动主库,会导致丛库与主库同步错误,如何快速恢复主从同步关系呢,如下有两种方法(最好一定要在夜晚业务低缓期做优化,白天业务峰值会影响数据库正常运作):
(1) 忽略错误后,继续同步:
此种方法适用于主从库数据内容相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况。否则不建议使用
Master端执行如下命令,将数据库设置全局读锁,不允许写入新数据:
flush tables with read lock; |
Slave端停止Slave I/O及sql线程,同时将同步错误的SQL跳过1次(次数自定义,最好不要太多),跳过会导致数据不一致,最后启动start slave,同步状态恢复,命令如下:
stop slave; set global sql_slave_skip_counter =1; start slave; |
最后将Master端读锁解开即可,解锁命令如下:
unlock tables; |
(2) 重新做主从同步
第一种:局部同步
在mysql 从库下
先查看binlog文件记录的数据库操作
查看每次position变换之间的数据操作,选择要同步的操作点位信息。
mysqlbinlog mysql-bin.000002 |more
linux命令行写如下命令
mysqlbinlog mysql-bin.000002 --start-position=mmm --stop-position=nnn |mysql -uroot -p123456
即可恢复在m到n之间的所有数据库操作!
第二种:全部同步
此种方法适用于主从库数据内容相差很大,或者要求数据完全统一的情况,数据需完全保持一致。
先登录Master端执行如下命令,将数据库设置全局读锁,不允许写入新数据:
flush tables with read lock; |
之后退出
1:Master端基于mysqldump、xtrabackup工具进行数据库将完整的数据库备份,也可以用shell脚本或python脚本实现定时备份。
mysqldump -uroot -p123456(输自己的密码哦) --all-database -A >>all.sql
##这条命令不是在登录mysql上面执行的##
2:备份成功之后,将完整的数据导入至丛库
scp -r all.sql 192.168.1.115(从库ip):/root/
3:之后进入从库
mysql -uroot -p123456 <all.sql
4:登录从库
show databases;
数据全部同步!
最后将Master端读锁解开即可,解锁命令如下:
unlock tables; |
######额外拓展#####
Linux主主同步(也叫互为主从)
思路很简单,就是把操作完完全全在对应的服务器上配置一遍。。。。大家可以试试