清晨的博客

Mysql 主从复制

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 status\G 查看主从同步是否正确

确保如下两条参数,是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.完成主从同步,读写分离!!!!

posted @ 2017-09-15 20:48  清晨_Ye  阅读(279)  评论(0编辑  收藏  举报
沉浸模式