master数据库ip :78.159.xxx.238
slave数据库ip :78.159.xxx.209
同步的数据库: testOrderDb
同步账号:slaveuser 密码 : 123456
具体账号信息根据需求自己修改即可完成mysql的主从配置!
master机器上面的配置文件在mysqld区间增加下面内容:
vim /etc/my.cnf
[mysqld]
#mysqld字段增加如下信息
log-bin=mysql-bin #开启log bin
binlog_format=mixed #日志格式
server-id = 1 #server id,跟slave配置不同server-id,例这里写1,slave可以写1除外2.3.4...
expire_logs_days = 10 #日志保存时间
binlog-ignore-db=information_schema #这是mysql默认的数据库,忽略掉
binlog-ignore-db=mysql #这是mysql默认的数据库,忽略掉
binlog-ignore-db=performance_schema #这是mysql默认的数据库,忽略掉
binlog-do-db=testOrderDb #需要同步的数据库
登录master的数据库,创建同步的账号,指定给slave的ip使用
#创建用户slaveuser 密码123456
CREATE USER 'slaveuser'@'78.159.xxx.209' IDENTIFIED BY '123456';
#给读取文件权限
grant FILE on *.* to 'slaveuser'@'78.159.xxx.209' identified by '123456';
grant replication slave on *.* to 'slaveuser'@'78.159.xxx.209' identified by '123456';
flush privileges;
配置完成,重启mysql :
/etc/init.d/mysql restart
/usr/local/mysql/support-files/mysql.server restart
重新登录master的数据库:
show master status;
创建要同步的数据库:
create database testOrderDb default charset utf8;
mysqldump -h78.159.xxx.238 -uroot -p testOrderDb>source.sql #dump master数据库到slave
mysql -h7127.0.0.1 -uroot -p testOrderDb
vim /etc/my.cnf 在mysqld段增加如下内容:
log-bin=mysql-bin
binlog_format=mixed
server-id = 2 #注意:master机器设置了1,这里设置跟master不同的server id
expire_logs_days = 10
binlog-ignore-db=information_schema #忽略默认的information_schema数据库
binlog-ignore-db=mysql #忽略默认的mysql数据库
binlog-ignore-db=performance_schema #忽略默认的performance_schema数据库
replicate-do-db=testOrderDb #设置需要同步的数据库跟master一样
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
更新配置文件后记得重启mysql
/etc/init.d/mysql restart
/usr/local/mysql/support-files/mysql.server restart
重启mysql完成,登录slave的数据库执行如下命令:
CHANGE MASTER TO MASTER_HOST='78.159.xxx.238',MASTER_USER='slaveuser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000010';
MASTER_HOST:是master机器的ip
MASTER_USER:slaveuser 是刚才在master创建用于同步的账号
MASTER_PASSWORD:123456 是刚才在master创建的密码
MASTER_LOG_FILE:是在master机器执行 show master status 出来的结果
开启slave执行:START SLAVE;
查看slave状态执行:show slave status\G
--------------------------------------------------至此,主从配置已经完成-------------------------------------------
set global read_only=1; 对于非root用户,切换到root用户后还是可以进行增删改查的哦。
read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作。
为了确保所有用户,包括具有super权限的用户也不能进行读写操作,就需要执行给所有的表加读锁的命令
flush tables with read lock;
这样使用具有super权限的用户登录数据库,想要发生数据变化的操作时,也会提示表被锁定不能修改的报错。
将slave数据库read-only=1设置只读后,在master执行GRANT USAGE ON *.* TO 'user01'@'localhost' IDENTIFIED BY'123456' WITH GRANT OPTION;创建一个普通用户,然后用普通用户登录从库,执行操作会报错。