MySQL主从复制
服务器多MySQL服务搭建和主从复制
一、One_Server多MySQL服务搭建
【1】第一个MySQL服务搭建
在这里不做介绍,我们认为第一个MySQL服务已经搭建完成;
【2】复制MySQL的basedir目录
# cp /usr/local/mysql/ /usr/local/mysql_s //假如原来的MySQL的basedir为/usr/local/myql/
【3】拷贝配置文件
# cp /usr/local/mysql_s/support_files/my-small.cnf /usr/local/mysql_s/my.cnf # vim /usr/local/mysql_s/my.cnf [mysqld] port = 3307 //原来的MySQL的 port = 3306 socket = /tmp/mysql_s.sock //原来的MySQL的socket在/tmp/mysql.sock
【4】拷贝启动脚本并修改
# cp /etc/init.d/mysqld /etc/init.d/mysqld_s # vim /etc/init.d/mysqld_s basedir=/usr/local/mysql_s datadir=/data/mysql_s //原MySQL的datadir=/data/mysql conf=$basedir/my.cnf //在上面两项加上conf的路径,之前复制到了basedir下面了
【5】初始化
# cd /usr/local/mysql_s # ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql_s --datadir=/data/mysql_s
【6】启动第二个MySQL服务
# /etc/init.d/mysqld_s start # ps grep |grep mysqld //应该可以看到两组MySQL服务的数据
【7】关于两个MySQL服务的登录问题
登录两个MySQL,可以通过端口:
# mysql -h127.0.0.1 -P3306 //大P指定端口,登录另一个用-P3307;h指定host,因为是主机,用127.0.0.1
也可以通过socket:
# mysql -S /tmp/mysql.sock //登录另一个的时候,用-S /tmp/mysql_s.sock
二、MySQL主从搭建
注: 1. MySQL的主从复制比较脆弱,很容易中断,最好设定监控,对Slave_MySQL的Slave_IO_Running: Yes,Slave_SQL_Running: Yes进行监控,确保都是Yes才行。
2. MySQL的主从复制,操作方只能是Master_MySQL,Slave_MySQL方操作会出错。
下面演示两台server,两个MySQL服务主从复制的搭建方法。假如Mster和Slave服务器MySQL的安装配置完全一样.
Master_IP:192.168.220.120, Slave_IP:192.168.220.130
【1】修改Master_MySQL的配置:
# vim /etc/my.cnf [mysqld] server-id = 1 //主MySQL服务的server-id不能和从服务器的一样 log-bin=lius //打开二进制日志,等号后面自定义,在datadir下出现lius.000001样的二进制日志 binlog-ignore-db = mysql //也可以是binlog-do-db=db1,db2,指定多个同步数据库,指定忽略同步的库 # /etc/init.d/mysqld restart
【2】登录Master_MySQL,进行下面操作:
mysql> grant replication slave on *.* to lius@'192.168.220.130' identified by 'dddd7788'; //授权用户,指定slave的ip,仅给replication权限。 mysql> flush privileges; //刷新权限 mysql> flush tables with read lock; //锁表,确定数据相同 mysql> show master status; //显示值,对后面配置从服务器有用 +-------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------+----------+--------------+------------------+ | lius.000002 | 337 | | mysql | +-------------+----------+--------------+------------------+
【3】备份Master_MySQL数据,以便还原到Slave_MySQL,实现数据一致:
# mysqldump --all-databases --ignore-tables=mysql.* --default-character-set=utf8 > all.sql //忽略mysql库的同步,指定默认字符集为utf8
【4】Slave_MySQL配置参数修改:
# vim /etc/my.cnf server-id=2 //确保和主服务器不一样 replicate-ignore-db=mysql //因主已经指定,从可选择性进行配置,也可以写成replicate-do-db=db1,db2的形式 # /etc/init.d/mysqld restart //重启服务,从服务器的log-bin可以不打开
# mysql --default-character-set=utf8 < all.sql //还原主服务器的备份文件,文件因为跨服务器,可以用scp或者lrzsz这个包的功能来实现
【5】登录Slave_MySQL,作如下操作:
mysql> slave stop; //停止slave mysql> change master to master_host='192.168.220.120', master_port=3306, master_user='lius', master_password='dddd7788',
master_log_file='lius.000002', master_log_pos=337;
//指定主服务器的ip;指定主MySQL端口;指定登录主服务器的用户名和密码;指定上面mysql> show master status 的两个重要数据,可对照上面表格;
//然后,还需进入主的MySQL登录界面,解除读锁,因为之前加了mysql> flush tables with read lock,现在需要mysql> unlock tables,然后回到从MySQL进行下面操作: mysql> slave start;
【6】测试主从复制是否成功:
mysql> show slave status; 得到以下两项全部是Yes,即说明主从复制配置成功;在Master_MySQL的登录界面,进行建表、删表等操作,在Slave_MySQL看结果是否同步,检验主从效果。
Slave_IO_Running: Yes Slave_SQL_Running: Yes