mysql主从复制好处:
1. 如果是单个数据库,如果挂了就凉凉
2.主备数据库,挂了一台主库,我可能还有很多个备用的数据库
2,读和写分开,减少了数据库的压力
实验准备:
主机一(主) : 192.168.11.70
主机二(从): 192.168.11.224
都装有Mariadb
第一步-主机的操作:
1.在matser主库上的操作,开启主库功能
先关闭服务
systemctl stop mariadb
编辑/etc/my.cnf
写入如下信息
[mysqld]
server-id=10 # 这个id是自己定义的
log-bin=clare-logbin # 自定义日志输出名
启动服务systemctl start mariadb
**2.在主库创建用户,用于同步数据 **
create user clare@'%' identified by '1210';
授予普通用户slave的身份
grant replication slave on *.* to 'clare'@'%';
3.锁定数据库的库表,禁止写入
这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。
一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,
读操作顺利进行。
flush table with read lock;
解锁语句是:UNLOCK TABLES;
4记录下主库的状态,记录下,日志文件的名字,和位置
show master status;
5.导出主库的数据, 并发送给从机
mysqldump -u root -p --all-databases > /tmp/db.sql
远程传输主库的数据,给从库,进行导入
scp /tmp/db.sql root@192.168.11.224:/tmp/
主机到这里就不要动了,去操作从机
2,配置从机
在从库slave机器的配置如下
1.在从库的 /etc/my.cnf中添加参数,添加只读参数
[mysqld]
server-id=3 #这个id是自己定义的
read-only=true # 设定只读
然后重启服务:
systemctl restart mariadb
2, 导入数据
数据导入,方式有很多种
第一种:
在mysql中ource /tmp/db.sql;
第二种
在linux中:
mysql -uroot -p < /tmp/db.sql
第三种
navicat
第四种,如果你数据量特别大的话,使用第三方工具
如xtrabackup
3,复制修改并执行这条命令
以root用户进入mysql 执行
change master to master_host='192.168.11.70', # 主机id
master_user='clare', # 主数据库的用户名
master_password='1210', # 主数据库的密码
master_log_file='clare-logbin.000002', # 监听的主机的日志
master_log_pos=626; # 主机日志的位置
然后开启slave模式
start slave;
5.检查slave机器的主从是否正确
show slave statusG
查看主从同步是否正确
确保如下两条参数,是yes,即主从复制正确
Relay_Master_Log_File: clare-logbin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6.此时mariadb数据库退出root用户,使用普通用户配置,因为root身份权限太大,无法达到read-only效果
6.此时mariadb数据库退出root用户,使用普通用户配置,因为root身份权限太大,无法达到read-only效果
6.此时mariadb数据库退出root用户,使用普通用户配置,因为root身份权限太大,无法达到read-only效果
7.此时在主库写入数据,查看从库是否正确同步
解锁主库的锁,写入数据,查看从库是否同步
unlock tables;
8.从库只能读取数据,并且同步主库,即为正常
9.完成主从同步,读写分离!!!!