一、使用mysqld_multi新建mysql实例(注:本实例mysql安装在/usr/local下)

# vi my.cnf       #进入mysql配置文件添加以下四行

[mysqld_multi]

mysqld=/usr/local/mysql/bin/mysqld_safe

mysqladmin=/usr/local/mysql/bin/mysqladmin

user=mysql


修改my.cnf配置文件,尾处添加以下几行:

[mysqld2]

replicate-do-db=class      #指定需要同步的数据库名(此例DB_NAME=class)

replicate-ignore-db=mysql      #不需要同步的数据库名

port=3307 #从数据库端口号,也可以改为其他的,只要不占用系统中端口号就行

socket=/tmp/mysqld2.sock      #指明从数据库sock路径

pid-file=/tmp/mysql2.pid      #从数据库pid路径

datadir=/usr/local/mysql2/var      #从数据库目录路径

log=/usr/local/mysql2/mysql2.log      #从数据库日志路径


server-id=3

master-host=localhost                 #主的IP,单机么就直接localhost

master-user=root    #主数据库的用户名,一般我们一个数据库一个用户与密码,这边偷懒直接root了

master-password=123456      #主数据库用户名的密码,测试环境下简单粗暴root密码


如果(单机环境中)需要一主多从,则复制以上[mysqld2]这段,稍做修改就可以了。


--------------初始化第二个数据库------------------

mysql_install_db --datadir=/usr/local/mysql2/var --user=mysql


--------------启动mysql2--------------------------

mysqld_multi start 2


--------------使用socket登录实例------------------

mysql -uroot -S/tmp/mysql2.sock


--------------进入mysql设置root用户密码-----------

set password for 'root'@'localhost'=password('123456')


退出mysql后,重启mysql服务(注:一般维护重启数据库顺序,先停从mysql2,再直接重启主mysql,最后等主的起来后再把从mysql开启,这样就不太会引起主从报错。

mysqld_multi stop 2          #停

/etc/init.d/mysqld restart   #重启

mysqld_multi start 2     #启动


-------------主服务器宕机后主从报错--------------- 

假如主服务器宕机后或者服务停了,再次开启则mysql主从会报错,避免重新change master这个操作,维护时重启数据库顺序要记住,这是我认为的哈。


接下来我们解决报错方法:(一般为这个报错,如果主从上面status中mysql-bin.*****和pos值都一致的话,那就要找度娘了)

1.在主服务器上执行

   mysql> show master status;

   +------------------+----------+--------------+------------------+

   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

   +------------------+----------+--------------+------------------+

   | mysql-bin.000004 |      308 |              |                  |

   +------------------+----------+--------------+------------------+

   1 row in set (0.00 sec)

2.在从服务器上执行

   mysql> change master to master_host='127.0.0.1',master_user='root',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=308;         #注:master_log_pos=308 中308没有引号,是裸的。


接下来开启从服务器的复制功能

   Mysql> start slave;


最后我们在从mysql中执行

   Mysql> show slave status \G


显示以下就说明简单mysql单机主从完成了

*************************** 1. row ***************************

             Slave_IO_State: Waiting for master to send event

                Master_Host: localhost

                Master_User: root

                Master_Port: 3306

              Connect_Retry: 60

            Master_Log_File: mysql-bin.000001

        Read_Master_Log_Pos: 272

             Relay_Log_File: mysql2-relay-bin.000003

              Relay_Log_Pos: 235

      Relay_Master_Log_File: mysql-bin.000001

           Slave_IO_Running: Yes          #这条和下面那条要同时为yes状态。

          Slave_SQL_Running: Yes

            Replicate_Do_DB: class        #这个就是我们前面指定同步的数据库名

        Replicate_Ignore_DB: mysql   #这个是我们忽略,不需要同步的数据库名,一般都为mysql默认的那个数据库。