mysql主从搭建
系统环境
mysql Ver 8.0.11 for Linux on x86_64 (Source distribution) CentOS Linux release 7.5.1804 (Core)
查看centos版本命令:cat /etc/redhat-release
安装mysql
二种方式
分别在二台vps中安装mysql
- lnmp包,php开发可以选择此方式
- yum源,教程见:https://www.cnblogs.com/MrXiaoAndDong/p/mysql8.html
mysql数据文件目录:vim /usr/local/mysql/var/ mysql配置文件目录:vim /etc/my.cnf
配置mysql
修改配置文件:vim /etc/my.cnf
master配置
log-bin=mysql-bin binlog_format=mixed server-id = 1 binlog_expire_logs_seconds = 864000 early-plugin-load = "" binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sysslave配置
server-id=2binlog-format 是binlog的格式,有三种格式
- statement:基于sql的复制,每修改一条sql语句就会记录到binlog中,优点:不需要记录每条sql导致的数据变化,减少了binlog日志量,缺点:某些情况下回导致主从不一致(sleep()函数,last_insert_id()等)
- row:基于行的复制,记录数据修改内容,缺点:日志量大
- mixed:混合模式,一般复制使用statement,对应statement无法复制的使用row,mysql会根据执行的sql选择其中一种模式
binlog-ignore-db:不记录binlog的数据库
binlog-do-db:要记录binlog的数据库
启动mysql
/etc/init.d/mysql start 或者systemctl start mysqld.service
配置mysql容许外网访问
修改mysql用户
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’; #更新一下用户的密码 FLUSH PRIVILEGES; #刷新权限
关闭防火墙(测试环境使用)
查看防火墙状态:systemctl status firewalld 关闭防火墙:systemctl stop firewalld
开启同步吧
主库
查看binlog信息
mysql> show master status; +------------------+----------+--------------+-------------------------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+-------------------------------------------------+-------------------+ | mysql-bin.000010 | 1590 | | mysql,information_schema,performance_schema,sys | | +------------------+----------+--------------+-------------------------------------------------+-------------------+ 1 row in set (0.00 sec)从库
执行以下命令
mysql> CHANGE MASTER TO -> MASTER_HOST='', -> MASTER_USER='', -> MASTER_PASSWORD='', -> MASTER_LOG_FILE='mysql-bin.000010', -> MASTER_LOG_POS=1590;开始同步:start slave 查看slave:show status slave
test
此时服务以及配置好了,在主库创建数据库和表进行测试吧
如果从库发现有同步失败的情况,可以选择忽略 stop slave; set global SQL_SLAVE_SKIP_COUNTER=1; show global variables like 'SQL_SLAVE_SKIP_COUNTER'; start slave;查看binlog内容命令:
show binlog events in 'bin-log.000010'