mysql主从配置
MySQL主从配置
主服务器设置
1.首先创建一个从服务器可以连接的用户,并授予权限(一般只需要读的权限就够了)
# mysql -u root -p
# 允许本地 IP 访问 localhost, 127.0.0.1
# insert into mysql.user(Host,User,Password) values('localhost','zhouz',password('1234'));
# 允许外网 IP 访问
# insert into mysql.user(Host,User,Password) values('%','zhouz',password('1234'));
# 刷新授权
# flush privileges;
# 创建数据库
# create database cmdb_v2 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# 授予用户通过外网IP对于该数据库的全部权限
# grant all privileges on `zhouzdb`.* to 'zhouz'@'%' identified by '1234';
# 授予用户在本地服务器对该数据库的全部权限
# grant all privileges on `cmdb_v2`.* to 'zhouz'@'%' identified by '1234';
# 刷新权限
# flush privileges;
2.找到主数据库的配置文件my.cnf(或者my.ini),我的在/data/mysql56/my.cnf,添加如下两行
log_bin = mysql_bin #开启二进制日志
server_id = 1 #设置server-id
如果没有找到配置文件
查看mysql默认读取my.cnf的目录
如果没有设置使用指定目录的my.cnf,mysql启动时会读取安装目录根目录及默认目录下的my.cnf文件。
/etc/my.cnf, /etc/mysql/my.cnf, /usr/local/etc/my.cnf, ~/.my.cnf 这些就是mysql默认会搜寻my.cnf的目录,顺序排前的优先。 如果这些目录下面都没有,就自己创建一个,或者从别的地方复制一个
命令
mysql --help|grep 'my.cnf'
输出
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
这是我的my.cnf全部内容
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[mysqld]
log_bin = mysql_bin #开启二进制日志
server_id = 1 #设置server-id
binlog_do_db = hd #需要复制的数据库名
binlog_ignore_db = mysql #不需要复制的数据库名
binlog_ignore_db = information_schema #不需要复制的数据库名
binlog_ignore_db = performance_schema #不需要复制的数据库名
max_allowed_packet = 20M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3.重启mysql,然后查看主服务器二进制文件名与位置
show master status;
File就是二进制文件名
position就是位置
到此为止,我们需要配置主从,主这边所需要的所有东西都拿到了
这个时候
分别的服务器ip,mysql的账号和密码,主服务器的二进制文件名和位置
从服务器设置
1.同样找到从服务器的配置文件,只需要添加server_id 一行就行了
server_id = 2 #设置server-id,这里的id不能和主的一样
2.重启服务器,进入mysql,执行下面的语句,等号后面后换成我们从服务器拿到的数据
CHANGE MASTER TO
MASTER_HOST='113.111.111.111',
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql_bin.000001',
MASTER_LOG_POS=442414;
3.如果没有错误,我们的主从就搭建完成了
4.我们执行start slave;开启主从
start slave;
5.执行 SHOW SLAVE STATUS\G可以查看主从是否运行正常
如图,两个必须都为yes才算正常,这时可以随便更改下主mysql的数据,不错意外,从服务器应该会自动同步过来了
SHOW SLAVE STATUS\G
注意事项
1.当配置完成Slave_IO_Running、Slave_SQL_Running不全为YES时,show slave status\G信息中有错误提示,可根据错误提示进行更正。
2.Slave_IO_Running、Slave_SQL_Running不全为YES时,大多数问题都是数据不统一导致。
3.两台数据库都存在db数据库,而第一台MySQL db中有tab1,第二台MySQL db中没有tab1,那肯定不能成功。
4.已经获取了数据的二进制日志名和位置,又进行了数据操作,导致POS发生变更。在配置CHANGE MASTER时还是用到之前的POS。
5.stop slave后,数据变更,再start slave。出错。更正方法重新执行一遍CHANGE MASTER就好了。