MySQL两主一从服务器搭建
配置两个主服务器
1.修改两个主服务器配置文件
vim /etc/my.cnf
log-bin=mysql-bin #开启二进制日志
server-id=id号
service mysqld start #开启mysql服务
2.两个主服务器开启授权
mysql> grant replication slave on *.* to '用户'@'%' identified by '密码'; #创建授权用户
mysql> show master status;#查看binlog文件
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 310 | | | #连接从库所需要的信息
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
配置从服务器
这个配置失C6yum安装,源码安装配置一样,配置到相应的路径下即可
注意:这个服务器不需要开启
1.修改从服务器配置文件
vim /etc/my.cnf
[mysqld_multi] #添加次模块
mysqld=/usr/bin/mysqld_safe #源码安装注意文件路径
mysqladmin=/usr/bin/mysqladmin
log=/tmp/multi.log
[mysqld11] #这个数字随便写 添加主一服务器配置
port=3306 #设置子库端口,不能相同
pid-file=/var/lib/mysqla/mysqld.pid #源码安装注意文件路径
datadir=/var/lib/mysqla
socket=/var/lib/mysqla/mysql.sock
server-id=xx
user=mysql
[mysqld12] #这个数字随便写 添加主一服务器配置
port=3307 #设置子库端口
pid-file=/var/lib/mysqlb/mysqld.pid #源码安装注意文件路径
datadir=/var/lib/mysqlb
socket=/var/lib/mysqlb/mysql.sock
server-id=xx
user=mysql
3.从服务器初始化
mysql_install_db --datadir=/var/lib/mysqla --user=mysql #两个mysql子库初始化
mysql_install_db --datadir=/var/lib/mysqlb --user=mysql #5.6版本使用
mysqld --initialize-insecure --datadir=/var/lib/mysqla --user=mysql #初始化,此时初始化密码为空
mysqld --initialize-insecure --datadir=/var/lib/mysqla --user=mysql #5.7版本使用
4.目录授权
chown -R mysql.mysql /var/lib/mysqla/
chown -R mysql.mysql /var/lib/mysqlb/
5.开启两个子库
mysqld_multi --defaults-file=/etc/my.cnf start 11 #数字11是从配置文件配置的[mysql11],这个11
mysqld_multi --defaults-file=/etc/my.cnf start 12
6.从服务器登陆子库
mysql -P 3306 -S /var/lib/mysqla/mysql.sock #C6中正常进入子库没有问题
#C7中无法登录子库,只能在安全模式登陆子库,还没找到解决方法
7.子库连接主库
mysql> change master to master_host='10.0.0.143',master_user='laow',master_password='456',master_log_file='mysql.bin.000001'
,master_log_pos=1298;
mysql> show slave status\G; #查看主从是否正常连接
Slave_IO_Running: Yes #这连个选项都是Yes,则同步成功,否则失败,这项如果是No,则表示I/O线程开启失败
Slave_SQL_Running: Yes #这项如果是No,则表示SQL数据回访线程开启失败
start slave; #开启从库
stop slave #关闭从库
问题
在执行完start slave后
发现Slave_IO_Running: Connecting
解决方法:max_allowed_packet
mysql> set global max_allowed_packet=16384000;(16M)#这个选项容量太小,需要增大
vim /etc/my.cnf 修改:max_allowed_packet=16M #这两种设置都可以
#在查看连接状态
mysql> show slave status\G;
Slave_IO_Running: Yes #连接成功了
Slave_SQL_Running: Yes