操作使用的环境
主从配置后,主写同步到从,从写无法同步到主(已测试)
Mysql主从配置:
主服务器ip:192.168.200.100
从服务器ip:192.168.200.200
系统:centos7 3.10.0
[root@localhost lib]# uname -a
Linux localhost.localdomain 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
数据库:mysql5.6.45
[root@localhost lib]# mysql --version
mysql Ver 14.14 Distrib 5.6.45, for Linux (x86_64) using EditLine wrapper
一、数据库安装
1、关掉防火墙
2、关掉shelinux
3、rpm包安装。
查看防火墙状态:# systemctl list-unit-files|grep firewalld.service
如果显示firewalld.service enabled则需要关闭
# systemctl stop firewalld.service 停止防火墙
# systemctl disable firewalld.service #禁止firewall开机启动
1、安装 MySQL:
接下来我们在 Centos7 系统下使用 yum 命令安装 MySQL,需要注意的是 CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除,所以在安装前我们需要先去官网下载 Yum 资源包,下载地址为:https://dev.mysql.com/downloads/repo/yum/
1-1Wget下载rpm包
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
1-2解压rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
1-3更新yum源
yum update
1-4yum安装
yum install mysql-server
1-5mysql数据库的属组授权(一般情况默认是mysql组)
chown mysql:mysql -R /var/lib/mysql
1-6新数据库需要初始化数据库
mysqld –initialize
1-7启动mysql数据库
systemctl start mysqld
1-8查看数据库状态
systemctl status mysqld
以上为数据库通过rpm包的安装过程,做主备的机器都按上述安装步骤操作
数据库授权,是否允许某用户管理
使用mysql命令进入mysql,mysql -uroot -p,然后输入密码。
授权远程访问操作如下三步:
1.use mysql; #取得mysql操作权
2.grant all privileges on *.* to 'root'@'%' identified by 'password'; #授权用户,指定可操作的库和表以及可使用的用户、IP、密码
3.flush privileges; #刷新权限表
4、systemctl restart mysqld #退出mysql重启mysql服务
三、配置master主数据库
1、修改配置文件
Linux环境下,mysql的配置文件位于 /etc/my.cnf
# vi /etc/my.cnf 编辑配置文件
配置文件中加入(需在[mysqld]头部下配置如下命令)
log-bin=mysql-bin #开启二进制日志
server-id=2 #标识唯一id(必须),一般使用ip最后位
binlog-ignore-db=information_schema #指定不同步的数据库,可设置多个
binlog-ignore-db=cluster
binlog-ignore-db=mysql
binlog-do-db=ufind_db #指定需要同步的数据库(和slave是相互匹配的),可以设置多个,配置完后续,如果没这个库,需要创建
解释:server-id:用于标识唯一的数据库,这里设置为2,在设置从库的时候就需要设置为其他值。
binlog-ignore-db:表示同步的时候ignore的数据库
binlog-do-db:指定需要同步的数据库
2、重启服务,进入mysql
# systemctl restart mysqld.service 重启mysql服务
3.进去mysql设置允许从库获得主库日志
注:这里使用root用户配置,不建议使用,正常使用新创建的用户进行授权
#给从库放权限
[root@localhost ~]# mysql -u root -pxxx
mysql>GRANT FILE ON *.* TO '用户名'@'IP地址' IDENTIFIED BY '密码'; #创建用户
mysql>GRANT REPLICATION SLAVE ON *.* TO 'zhq'@'192.168.2.2' IDENTIFIED BY '123456';
#修改用户权限
mysql>select host,user,password from mysql.user; #查看是否修改成功
mysql>FLUSH PRIVILEGES; #刷新授权
注:如果数据库有数据需要进行数据迁移保证数据的一致性
创建数据库: 在从库中创建一个和主库相同的数据库,不然两个数据库不能同步(进行过数据迁移就跳过)
4.重启MySQL,登录MySQL,查看主库信息
mysql> show master status; 查看主数据库信息
如果执行这个步骤最后为Empty set(0.00 sec),那说明前面的my.cnf没配置对。如果配置成功,会显示下图。
四、配置从数据库
修改配置文件,方法同上,加入内容为:
log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysq
replicate-do-db=ufind_db
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
4.重启MySQL,登录MySQL
#关闭Slave
mysql> stop slave; #设置连接主库信息
mysql> change master to master_host='192.168.200.100',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=292; #设置连接主库信息,log_file和log_pos参考上图片标红两个参数
mysql> start slave; #开启Slave
注:上面的master_log_file是在配置Master的时候的File字段, master_log_pos是在配置Master的Position 字段。一定要一一对应
5.查看信息
mysql> show slave status \G; #slave从机器上查看连接是否没问题。
注意事项:
1、检查Slave_IO_Running和Slave_SQL_Running的状态是否为yes,如果显示no则有问题,需查看下面的报错信息进行处理。
2、Last_IO_Error: #此处会显示错误信息,如果没问题,则不显示。
3、从库报这个错误:Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
Got fatal error 1236 from master when reading data from binary log: 'could not find next log'
解决方法:说明从库配置的log_file和log_pos的值与主库的值不对应。需
CHANGE MASTER TO MASTER_LOG_FILE='testdbbinlog.000002',MASTER_LOG_POS=120; #设置连接主库信息
mysql>stop slave; #停止从数据服务
mysql>reset slave; #更新从数据服务
mysql>start slave; #重启从服务
用到的mysql命令:
1.查看数据库中的数据库
show databases;
2.使用某个数据库
use 数据库名字;
3.显示数据库中的表
show tables;