一、Mysql主从
1.数据的备份
2.数据备份(可以从从服务器读数据)
二、主从配置-主上操作
1.将两个服务器安装mysql
拷贝文件到另一个虚拟机的命令为:scp /etc/my.cnf root@192.168.130.139:/etc/
# /etc/init.d/mysqld start
启动mysql服务
服务启动失败时查看mysql.err: # vim /data/mysql/mysql01.err
有错误会在这里报错
一般有报错则是权限错误
一般是用户属组错误
2.修改my.cnf,增加server_id = 138和log_bin=zjlinux1。
3.然后重启mysql服务
然后查看/data/mysql/,会发现多出来两个文件
4.把mysql库备份并恢复成zj库,作为测试数据
# mysqldump -uroot mysql > /tmp/mysql.sql
然后创建一个库,把备份的数据导入进去
这时候查看/data/mysql,发现里面会多出一个zj的库
5.创建用作同步数据的用户
(1)首先在主服务器中进入数据库 # mysql -uroot
6.使用grant指定slave权限针对的是repl@192.168.130.139所有库所有表
mysql> grant replication slave on *.* to 'repl'@192.168.130.139 identified by 'password';
7.接下来要用flush把这个表锁住
flush tables with read lock;
(解锁的语句是unlock tables;
)
目的是让目前的数据保持当前的状态,就是不让它继续往下写了。因为接下来往下做的时候会把从服务器的备份进行同步,两者保持一致这样才能实现同步。
8.然后查看一下它的状态
show master status;
三、主从配置-从上操作及配置解释
1.安装mysql
2.修改配置文件/etc/my.cnf ,server_id =139 ,和主服务器不同。
3.将备份传到从服务器中
# scp /tmp/mysql.sql root@192.168.130.139:/tmp/
4.在从服务器查看是否传入成功
5.然后将mysql的库导入同名库中
(1)先进入mysql中创建一个zj库
(2)退出mysql中后,将mysql库的内容导进来 # mysql -uroot zj < /tmp/mysql.sql
查看zj库
两边的数据应该是一致的
(3)实现主从
先将从服务关掉
关掉服务是因为要做主从非常关键的一步change master
mysql> change master to master_host='192.168.130.138',master_user='repl',master_password='123456',master_log_file='zjlinux1.000001',master_log_pos=645198;
然后开启从服务
查看从服务器状态
若出现Slave_IO_Running: Connecting,则链接失败
可能有以下几种错误原因
- 网络不通
- 账户密码错误
- 防火墙
- pos不对
然后逐项排查
① 网络不通:因为从服务器是虚拟机,网卡选择了桥接模式,ip地址确认在同一网段中,且互ping能通,排除网络问题。
② 防火墙:关闭防火墙后重新查看,排除防火墙原因。
③ pos不对:这个也可以排除,因为pos内容在主库上拷贝过来,所以也将这个原因排除了。
④ 经过检查,是在change master的时候,将密码写错了。
解决步骤:
1)stop slave;
2)重新change从的参数
mysql> change master to master_host='192.168.130.138',master_user='repl',master_password='password',master_log_file='zjlinux1.000001',master_log_pos=645198;
3)start slave;
4)show slave staus\G;
Slave_IO_Running:Yes
Slave_SQL_Running: Yes
连接成功Slave_IO_Running和Slave_SQL_Running显示为Yes
在从服务器中能登录主服务器的mysql
# mysql -uroot -p000000 -h192.168.130.138 -P3306
(4)现在两边的数据已经保持一致,然后应该在主服务器上做一个操作,将之前锁住的表解锁 unlock tables;
共有条评论 网友评论