mysql多主一丛的配置

目前有个需求,希望把公司的多个mysql数据库备份,有一台服务器存储比较大,计划把其他的mysql备份到这上面,一开始计划使用dump回传,后来发现有些库数据比较大,因此使用master-slave,即多主一丛。

1 先在备份服务器安装mysql,开启mysqlmulti模式,配置my.cnf

[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
user = ‘your_user’
password=‘your_password’
log=/home/mysql/log/multi.log
[client]
#password       = your_password
[mysqld1]
#主库1
port = 3306
socket=/tmp/mysql1.sock
pid-file=/home/mysql/mysqldata1/mysql1.pid
datadir=/home/mysql/mysqldata1
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
#(注意linux下mysql安装完后是默认:表名区分大小写,列名不区分大小写; 0:区分大小写,1:不区分大小写)  
lower_case_table_names=1
max_connections=1000
server-id = 1

#要备份的库

replicate-do-db = mysql1

slave_skip_errors= 1158 1159 1008 1007 1062 1452
#slave_skip_errors= all
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld2]
#主库2
port = 3307
socket=/tmp/mysql2.sock
pid-file=/home/mysql/mysqldata2/mysql2.pid
datadir=/home/mysql/mysqldata2
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
#(注意linux下mysql安装完后是默认:表名区分大小写,列名不区分大小写; 0:区分大小写,1:不区分大小写)
lower_case_table_names=1
max_connections=1000
server-id = 2

#要备份的库
replicate-do-db = mysql2
slave_skip_errors=1158 1159 1008 1007 1062 1452
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size= 268435456
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2 启动关闭数据库,my.cnf配置好,启动时会自动创建文件和库文件,注意账号权限。

mysqld_multi start 1
mysqld_multi stop 1

mysqld_multi start 2

mysqld_multi stop 2

3 设置各数据的密码

/usr/bin/mysqladmin -u root password 'you_password' -S /tmp/mysql1.sock

/usr/bin/mysqladmin -u root password 'you_password' -S /tmp/mysql2.sock

测试能关闭启动数据库,密码能进入

4 各主库设置同步账号,注意授权和同步库,我这里是全部同步,偷懒全部授权了莫学。

grant all privileges on *.* to 'your_user'@'%' identified by 'you_password';

5主库要开log-bin,即在主库my.cnf增加重启,开过这步可省略

server-id=219  #主库和备库id不能重复
log-bin=mysql-bin
expire_logs_days=8

6 导出备份库,具体参数含义百度吧,我这里就不详细介绍了

mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 mysql1  > mysql1.sql

mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 mysql2  > mysql2.sql

查看主库导出的事务位置,即找到CHANGE MASTER这行

 head -22 mysql1.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=120;

head -22 mysql2.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=147774;

7 将导出文件传到备库并导入,导入前要创建数据库名

mysql -S /tmp/mysql1.sock  -uroot -p mysql1 < /root/mysql1.sql

mysql -S /tmp/mysql1.sock  -uroot -p mysql2 < /root/mysql2.sql

8 导入成功后,在备库启用同步,注意MASTER_LOG_FILE和 MASTER_LOG_POS和第6步有关系

change master to master_user='you_user',master_password='your_password',master_host='your_host',master_port=your_port,
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=120;

change master to master_user='you_user',master_password='your_password',master_host='your_host',master_port=your_port,
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=147774;

start slave;

show slave status\G;  查看同步状态

至此两主一丛基本完成,中间若出现问题根据问题报错解决,mysql相对来说上手还是比较简单,网上各种问题的介绍也比较多,大家可以参考。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主主复制是指在两台 MySQL 服务器之间建立双向主从复制,使得两台服务器都可以作为主服务器和从服务器进行读写操作。以下是 MySQL 主主复制的配置部署步骤: 1. 首先,在两台服务器上安装 MySQL 数据库,并确保两台服务器的 MySQL 版本相同。 2. 配置两台服务器的 MySQL 配置文件 my.cnf,将 server-id 参数设置为不同的值,以便在复制时避免 ID 冲突。 3. 在两台服务器上创建用于主从复制的用户,并授予相应的权限。 4. 在第一台服务器上执行以下命令,创建用于复制的数据库和表,并添加一些测试数据: ``` CREATE DATABASE mydb; USE mydb; CREATE TABLE mytable (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), PRIMARY KEY (id)); INSERT INTO mytable (name) VALUES ('John'), ('Mary'), ('Tom'); ``` 5. 在第一台服务器上执行以下命令,开启二进制日志记录(binary logging): ``` vi /etc/my.cnf # 添加以下配置 log-bin=mysql-bin server-id=1 ``` 6. 在第一台服务器上执行以下命令,重启 MySQL 服务,使配置生效: ``` service mysqld restart ``` 7. 在第二台服务器上执行以下命令,开启二进制日志记录(binary logging): ``` vi /etc/my.cnf # 添加以下配置 log-bin=mysql-bin server-id=2 ``` 8. 在第二台服务器上执行以下命令,重启 MySQL 服务,使配置生效: ``` service mysqld restart ``` 9. 在第二台服务器上执行以下命令,配置主服务器为第一台服务器: ``` CHANGE MASTER TO MASTER_HOST='first_mysql_host', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; ``` 其中,first_mysql_host 为第一台服务器的 IP 地址或主机名,replication_user 和 password 为在第一台服务器上创建的用于复制的用户和密码,mysql-bin.000001 为第一台服务器的二进制日志文件名,107 为二进制日志文件的偏移量。 10. 在第一台服务器上执行以下命令,配置主服务器为第二台服务器: ``` CHANGE MASTER TO MASTER_HOST='second_mysql_host', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; ``` 其中,second_mysql_host 为第二台服务器的 IP 地址或主机名,replication_user 和 password 为在第二台服务器上创建的用于复制的用户和密码,mysql-bin.000001 为第二台服务器的二进制日志文件名,107 为二进制日志文件的偏移量。 11. 在第一台服务器上执行以下命令,启动主从复制: ``` START SLAVE; ``` 12. 在第二台服务器上执行以下命令,启动主从复制: ``` START SLAVE; ``` 13. 验证主从复制是否正常工作,可以在两台服务器上执行以下命令: ``` SELECT * FROM mydb.mytable; ``` 如果输出结果相同,则说明主从复制已经成功配置部署。 以上就是 MySQL 主主复制的配置部署步骤。需要注意的是,在进行主主复制配置时,需要确保两台服务器的 MySQL 版本相同,并且需要注意防止 ID 冲突。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值