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
原文地址:https://www.cnblogs.com/llius/p/5089647.html