在同一台机器上启动两个mysql并启动主从
前言
首先机器上已经有了一台mysql服务,找到mysql的安装位置复制一份。
主数据库修改
修改my.cnf
将/etc/my.cnf修改为:
1 | [mysql] |
这样做的目的是指定端口和文件,防止和从数据库冲突,导致起不来
使用命令安全关闭mysql
1 | ./mysqladmin -uroot -p123456 shutdown |
然后重新启动:
1 | ./mysqld_safe --defaults-file=/etc/my.cnf & |
复制mysql
本机器mysql安装位置是:/usr/local/mysql,使用命令复制出来一份:
1 | cp -R /usr/local/mysql /usr/local/mysql3308 |
然后修改文件夹所在组:
1 | chown -R mysql:mysql /usr/local/mysql3308 |
最好修改下文件夹权限:
1 | chmod -R 755 /usr/local/mysql3308 |
复制一份配置文件,默认配置文件在/etc/my.cnf
1 | cp /etc/my.cnf /etc/my3308.cnf |
编辑my3308.cnf,将内容改成如下:
1 |
|
初始化mysql
使用新的mysql程序初始化数据库
1 | /usr/local/mysql3308/bin/mysqld --defaults-file=/etc/my3308.cnf --initialize --user=mysql --basedir=/usr/local/mysql3308 --datadir=/usr/local/mysql3308/data |
初始化之后,会提醒初始化成功,并提示初始化密码。
修改/usr/local/mysql3308/data/auto.cnf里面的值,将里面的uuid改一下,然后保存。
注意:要设置data目录所属用户为mysql
1 | chown mysql.mysql -R ./data |
这个时候还没有启动mysql,可以使用命令:
1 | ./mysqld_safe --defaults-file=/etc/my3308.cnf & |
启动mysql报错,请看data下面err后缀的文件内容
查看是否启动成功:
1 | ss -tnl |
登录到主mysql
进入到主mysql:
1 | ./mysql -S /usr/local/mysql/data/mysql.sock -u root -p |
创建数据库同步用户:(必须为IP地址,localhost连不上)
1 | CREATE USER 'repl'@'123.57.44.85' IDENTIFIED BY 'slavepass'; |
授权:
1 | GRANT REPLICATION SLAVE ON *.* TO 'repl'@'123.57.44.85'; |
登录到从mysql
进入到mysql3308/bin目录下,执行:
1 | ./mysql -S /usr/local/mysql3308/data/mysql.sock -u root -p |
登录到mysql,修改原始密码。
因为我们只需要root本地登录,所以可以把密码改的简单点:
1 | alter user 'root'@'localhost' identified by '123456'; |
设置mysql主从
需要同时登录主数据库和从数据库
主数据库
查询master状态:
1 | show master status; |
会显示:
1 | show master status; |
接下来就不要操作主mysql,防止状态值发生变化。(mysql不能有任何操作,不然Position会变化)
从数据库
执行
1 | CHANGE MASTER TO MASTER_HOST='182.92.172.80',MASTER_USER='rep1',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=2734; |
master_log_file为主mysql显示File,pos是Position。
开启slave:
1 | start slave; |
查看slave状态:
1 | show slave status\G |
主要看两个参数,一个是Slave_IO_Running,另一个是Slave_SQL_Running。两个都为yes,才代表mysql主从开启成功。
注意事项
如果想停止mysql,首先登录到从数据库,运行命令去停止主从复制:
1 | stop slave; |
然后再运行
1 | CHANGE MASTER TO MASTER_HOST='182.92.172.80',MASTER_USER='rep1',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=2734; |
再恢复同步
1 | start slave; |
如果出现问题,可以重置同步
首先去从数据库停止同步:
1 | stop slave; |
主数据库执行:
1 | reset maseter; |
从数据库执行:
1 | reset slave; |
然后看主数据库的master:
1 | show master status; |
根据状态在从数据库中运行:
1 | CHANGE MASTER TO MASTER_HOST='182.92.172.80',MASTER_USER='rep1',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=2734; |
然后在从数据库中开启同步:
1 | start slave; |
同步设置同步哪些数据库
在主数据库/etc/my.cnf中写:
1 | 不同步哪些数据库 |