在研究mysql的过程中,从源码安装,多实例部署和启动到现在要说的主从服务器配置,因为之前没有运维的经验,一切都自己来做,挺有意思的,废话不说了,进入正题了。
先简单说明下主从服务器配置的好处(网上一搜一大把):
单向复制有利于健壮性、速度和系统管理:
1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。
选择一台服务器作为主服务器,选择另外一台作为从服务器,2者的mysql版本保持一致
1.我要同步的库名是demon,同步账号我暂时用的是root, 你也可以由root创建并授权一个账号
2. master配置
a.修改master服务器的配置文件my.cnf
找到server-id的配置地方,我继续采用的是server-id=1,注意从服务器的server-id需要保持与主服务不同;
然后添加以下配置:
log-bin=/home/demon/mysql/data/mysql-bin.000001 #这个是主服务器放置数据库二进制文件的地方
binlog_format=mixed
binlog-do-db=demon #要复制的数据库名,如复制多个库可添加多行
binlog-ignore-db=mysql #不需要复制的数据库名,也可列出多行
binlog-ignore-db=test
binlog-ignore-db=information_schema
这样就完成了主服务的配置添加,重启下 master的mysql服务,连接进入主mysql服务看看运行情况
mysql> show master status;
+------------------+------------------+----------+--------------+-----------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+-------------------------------+
| mysql-bin.000004 | 829 | demon | mysql,test,information_schema |
+------------------+----------+--------------+-------------------------------+
记录下该文件名mysql-bin.000004和偏移量829 ,会在之后从服务的初始化设置中用到。
b.使用mysqldump导出master服务器中的demon数据库
~$ cd /home/demon/mysql/bin
~$ ./mysqldump --master-data=1 --lock-all-tables=true -u root demon>/home/demon/demon_bak.sql
#上面命令中必须要加入--master-data选项,保证在dump时会记录到binlog名称和偏移值
#使用--lock-all-tables的原因就是为了数据在导出的时候没有其它新数据插入,保证一致性
#你可以根据实际情况来导数据,不一定要使用root账号
导出的demon_bak.sql你就可以再从服务器上进行初始化动作了,看后面的使用。
3.slave配置
a.相对master服务的配置来说,slave的配置就少了很多,只需要改动server-id与master不一致即可
slave服务中my.cnf的server-id我改为了2,即 server-id=2
b.重启slave的mysql服务
c.连接slave服务进行一些初始化操作
mysql> create database demon; #与主库一样建同样的库demon
mysql> use demon;
mysql> source /home/demon/demon_bak.sql #备份文件你是从主库copy过来的,放在哪里都OK
现在可以查看是否有导入成功
mysql> show tables;
如果你之前没有重启过slave服务,现在可以退出之后重启
连接slave mysql服务
mysql> change master to
mysql> master_host='***.***.***.***', #master服务所在的IP
mysql> master_user='root', #连接master服务的用户名
mysql> master_port=3400, #master服务端口号
mysql> master_log_file='mysql-bin.000001', #master的二进制数据文件,在master配置的时候有指明
mysql> master_log_pos=107, #最近成功更新的偏移值
mysql> master_connect_retry=30;
d.启动slave服务
mysql>start slave;
mysql>show slave status; 进行查看同步运行情况
总算是完结了,你可以再主服务那边进行插入更新删除操作,然后来从服务查看,会发现数据已同步了,完美的配置,可以以此为经验进行之后的学习了......
忘记说明主从服务同步日志存放位置:
均放在从服务data目录下 master.info 与 relay-log.info