一、使用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默认的那个数据库。