一、主从复制目的:
主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器。
二、场景描述
主服务器:IP地址192.168.62.149, mysql已经安装,无用户数据。
从服务器:IP地址192.168.62.146,mysql已经安装。
主服务器的mysql服务已经正常启动。
三、主从复制配置
主服务器上进行操作
1、创建用户并授权
1) mysql -uroot -p密码
2) mysql>grant replication slave on *.* to rep1@192.168.62.146 identified by '222222';
3) mysql>flush privileges;
2、查询主数据库的状态
1) mysql> show master status;
记下File以及Position的值,在后面进行从服务器操作的时候需要使用。(此次实验的File为mysql-bin.000006,pos为333)
配置从服务器
1、修改从服务器的配置文件/etc/my.cnf
使得“server-id=2”,并确定这个id没有被别的mysql服务所使用。
2、启动mysql服务(本地环境用的WNMP一键安装包,重启服务命令为:/root/lnmp restart)
mysqld_safe --user=mysql &
3、mysql登录并执行同步的sql语句,最后并启动slave
1) #mysql -uroot -p密码
2)mysql> change master to master_host='192.168.62.149',master_user='rep1',master_password='222222',master_log_file='mysql-bin.000006',master_log_pos=333;
3)mysql> start slave;
就启动了slave同步功能。
4、主从同步检查
执行如下语句
1)mysql>show slave status\G
来检查从服务器的同步情况,一个正常的输出结果应该如下面的形式:
Slave_IO进程以及slave_SQL进程都必须正常运行,在状态输出中表现为:“slave”;否则都是不正确的状态(如一个值是Yes,另一个是No则不行)。
5、主库存在数据情况下的主从复制
上述内容可以在主库无数据的情况下进行主从复制同步,当主库存在数据时需要做以下处理:
主库(已经进行授权操作)
1)mysql>flush tables with read lock; //主数据库锁表操作,不让数据再进行写入动作。
2)mysql>show master status; //记下File以及Position的值,以备从服务器使用。
3)把主服务器的数据文件复制到从服务器
mysqldump -u用户名 -p密码 数据库名 > 文件名
如:mysqldump -uroot -p111111 first_db > /mydata/first_db.sql
4)将此文件交给从库,这里用的scp命令
scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>
如:scp /mydata/first_db.sql root@192.168.62.146:/mydata
5)mysql>unlock tables; //取消主数据库锁定
从库
1)mysql -u用户名 -p密码
2)建立同名数据库
mysql> create database first_db;
3)导入之前得到的主库数据库备份文件
mysql -u用户名 -p密码 first_db < /mydata/first_db.sql
4)导入后再进行同步主库命令
mysql> change master to master_host='192.168.62.149',master_user='rep1',master_password='222222',master_log_file='FILE名',master_log_pos=POSITION值;
其中的FILE名和POSITION值为主库操作第2步获得的
5)开启同步
mysql> start slave;
6)同步检查