本文借鉴了n个博客组合而成的,因为在网上没找到一个比较完整的配置,故有了这篇文章,
我是个经不起批评的人,所以写的不好勿喷
主数据库设置:
1:开启mysql的二进制日志 (my.cnf文件 一般在/etc/my.cnf这个路径)
Vim /etc/my.cnf
2:添加二进制日志配置,记住要加在[mysqld_safe]上面一行
log-bin=master-bin (加,日志文件名称可以自己随意写)
server-id=1 (加,必须指定 要不会出错)
binlog-do-db=eduswstudent (加,需要备份的数据库名称,如果是全部数据库这行可以忽略)
binlog-ignore-db=mysql(加,不需要备份的数据库名称,如果是全部数据库这行可以忽略不写)
3:重启mysql
service mysql restart(如果报错 可以使用原始的命令重启 只是你没有配置的原因,也可以参考网上别的博客配置即可)
4:授权
进入mysql操作
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'次数据库的IP地址' IDENTIFIED BY '密码';
这行命令的意思是:允许在某个IP地址的某个用户以某个密码对当前数据库的所有库和所有表进行复制操作
5:注意
进入mysql操作
以上配置了权限,我们需要刷新以下权限使用命令:
mysql>flush privileges;
6:查看主要数据库的一些信息
show variables like 'server_id';#查看server_id的值是否为1,不为1的话请带起你的眼镜详细看第二步
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.00 sec)
mysql>show master status;show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 154 | eduswstudent | mysql | |
File: 日志文件名称
Position: 日志所在位置
注意:老铁们记着,后面要用的
到这里主数据库设置完毕,开始次数据库吧
次数据库(备份数据库)设置
1:开启mysql的二进制日志 (my.cnf文件 一般在/etc/my.cnf这个路径)
Vim /etc/my.cnf
2:添加二进制日志配置,记住要加在[mysqld_safe]上面一行
log-bin=master-bin (加,日志文件名称可以自己随意写)
server-id=1 (加,必须指定 要不会出错)
binlog-do-db=eduswstudent (加,需要备份的数据库名称,如果是全部数据库这行可以忽略)
binlog-ignore-db=mysql(加,不需要备份的数据库名称,如果是全部数据库这行可以忽略不写)
3:将备份数据库指向主数据库(以下信息都是前面设置的或者获得的,如果没找到请带起你的眼镜从头看)
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master授权的账号',
>MASTER_PASSWORD='master授权的密码',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;
备份数据库设置完毕
一些需要的操作
备份数据库上开始主从复制
mysql>start slave;
我们可以查看slave的运行状态:
show slave status\G;可以看到类似如下内容:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
注意:
Slave_IO_Running: YES 表示slave的日志读取线程开启
Slave_SQL_Running: YES 表示SQL执行线程开启
如果有主从复制有错误信息其实也可以看到
注意点
1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)如果要停止slave的复制可以使用命令:
mysql>stop slave;
3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题