文章目录
一.安装环境
Mysql安装教程见CentOS笔记
操作系统:CentOS 6或者7
数据库版本:MySql 5.6或者Mysql 5.7[最好保持一致,不一致也不要相差太大,5.6作为一个分界点,上下相差有些大,建议不要跨;如果版本不一致,官方说master的版本低于slave的版本没什么问题,但是反过来就会有很多问题。原因是比如新版本有一些功能老版本不支持,然后master上执行了这些操作,同步到slave上就会有问题。]
记得开放数据库端口
二.Master的配置
2.1 修改配置文件
- 修改mysql配置文件
#linux
vi /etc/my.cnf
#windows
修改my.ini文件
- 在该文件下[mysqld]中指定Master的配置如下:
#服务器唯一ID,一般取IP最后一段
server-id=138
#主从复制的数据库的名字,不设置表示发送所有,多个用逗号隔开
#binlog-do-db=master
#忽略mysql数据库,多个用逗号隔开
binlog-ignore-db=information_schema,performance_schema,mysql
#启用二进制日志,主库必须开启
log-bin=mysql-bin
#skip-name-resolve
#binlog过期清理时间
#expire_logs_days = 7
#binlog每个日志文件大小
#max_binlog_size 100m
2.2 重启MySql
#linux
service mysqld restart
#windows
net stop mysql
net start mysql
2.3 登录MySql
mysql [-h host] -u username -p
输入对应的密码
或
mysql [-hhost] -uusername -ppassword
直接登录
2.4 建立帐户并授权slave
- 建立帐户并授权
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';
注意:一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
2. 刷新权限
mysql> FLUSH PRIVILEGES;
2.5 显示主库信息
mysql>show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000005 | 5772 | mstest | information_schema,mysql | |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)
这里的 File 、Position是在配置Salve的时候要使用到的,Binlog_Do_DB表示要同步的数据库,Binlog_Ignore_DB表示Ignore的数据库,这些都是在配置的时候进行指定的。
三.Slave的配置
3.1 修改配置文件
- 修改mysql配置文件
#linux
vi /etc/my.cnf
#windows
修改my.ini文件
- 在该文件下[mysqld]中指定Slave的配置如下:
#服务器唯一ID,一般取IP最后一段
server-id=134
#跳过所有错误
slave-skip-errors=all
#该选项告诉从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志。用于链式复制服务器或者从服务器用来做增量备份
#log_slave_updates = 1
#设定需要复制的数据库(多数据库使用逗号,隔开)
#replicate-do-db
#如果库名不同,使用这个。
replicate-rewrite-db = kintech_pd -> kps_common
#忽略mysql数据库,多个用逗号隔开
#replicate-ignore-db
#设定需要复制的表
#replicate-do-table
#设定需要忽略的复制表
#replicate-ignore-table
#同replication-do-table功能一样,但是可以通配符
#replicate-wild-do-table
#同replication-ignore-table功能一样,但是可以加通配符
#replicate-wild-ignore-table
3.2 重启MySql
#linux
service mysqld restart
#windows
net stop mysql
net start mysql
3.3 登录MySql
mysql [-h host] -u username -p
输入对应的密码
或
mysql [-hhost] -uusername -ppassword
直接登录
3.4 配置从服务器
mysql>change master to master_host='192.168.137.16',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=120;
注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的120就是show master status 中看到的position的值,这里的mysql-bin.000001就是file对应的值)。
3.5 启动从服务器复制功能
Mysql>start slave;
3.6 检查从服务器复制功能状态
mysql> show slave status\G;
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
……………………(省略部分)
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
四.参考文档
Mycat实现Mysql主从复制和读写分离
MySQL5.6 数据库主从(Master/Slave)同步配置详解
mysql主从只同步部分库或表
Mysql数据库之Binlog日志使用总结
五.遇到的问题
- Slave_IO_Running: No
mysql版本不一致的问题,官方说master的版本低于slave的版本没什么问题,但是反过来就会有很多问题。原因是比如新版本有一些功能老版本不支持,然后master上执行了这些操作,同步到slave上就会有问题。 - Unknown system variable ‘binlog_checksum’
查找得知 binlog_checksum 只在mysql5.6.2以上版本出现,低于以下版本的情况下为binlog_checksum=none
六.名词解释
- 中继日志[relay log]
relay log很多方面都跟binary log差不多.
从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致.说白了就是主服务器的bin-log文件流读过来再存在本地,换个名字.