linux下mysql主从复制搭建

linux下mysql主从复制搭建

目标:搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,实现主从复制

环境:
  主数据库: 192.168.70.106
  从数据库: 192.168.70.235

配置步骤:

1、保证两个数据库中的库和数据是一致的;

2、在主数据中创建一个同步账号(可不创建使用现有的),如果仅仅为了主从复制创建账号,只需要授予REPLICATION SLAVE权限。
1)、创建一个账号,账号:root密码: root

CREATE USER ‘master’@’%’ IDENTIFIED BY ‘123456’;
GRANT REPLICATION SLAVE ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
3、配置主数据库
1)要主数据库,你必须要启用二进制日志(binary logging),并且创建一个唯一的Server ID,这步骤可能要重启MySQL。
2)主服务器发送变更记录到从服务器依赖的是二进制日志,如果没启用二进制日志,复制操作不能实现(主库复制到从库)。
3)复制组中的每台服务器都要配置唯一的Server ID,取值范围是1到(232)−1,你自己决定取值。
4)配置二进制日志和Server ID,你需要关闭MySQL和编辑my.cnf或者my.ini文件,在 [mysqld] 节点下添加配置。
5)下面是启用二进制日志,日志文件名以“mysql-bin”作为前缀,Server ID配置为1,如下:

复制代码

[mysqld]
log-bin=mysql-bin
server-id=1
#网络上还有如下配置
#binlog-do-db=mstest //要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名
#binlog-ignore-db=mysql //要忽略的数据库
innodb_flush_log_at_trx_commit=1
sync_binlog=1

4、重启mysql

命令:ps –ef|grep mysql #查看mysql进程
Kill -9 #杀掉所有mysql进程

5、查看主服务器状态:
命令:
cd /app/lczgtams/mysql/
bin/mysql -u root -p -S /app/lczgtams/mysql/mysql.sock #登录mysql
mysql> show master status; #查看主服务器状态

注意:记录好File和Position,后面要用
6、配置从数据库:
1)从服务器,同理,要分配一个唯一的Server ID,需要关闭MySQL,修改好后再重启,如下:

[mysqld]
server-id=2
#可以指定要复制的库
#replicate-do-db=test-xxx #在master端不指定binlog-do-db,在slave端用replication-do-db来过滤
#replicate-ignore-db=mysql #忽略的库
#网上还有下面配置
#relay-log=mysqld-relay-bin
复制代码

2)配置连接主服务器的信息:
登录从服务器mysql
cd /app/lczgtams/mysql/
bin/mysql -u root -p -S /app/lczgtams/mysql/mysql.sock #登录mysql

依次输入一下命令

mysql> stop slave;
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.70.106’,
-> MASTER_USER=‘root’,
-> MASTER_PASSWORD=‘root’,
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE=‘mysql-bin.000006’, #步骤5中 File 文件名称
-> MASTER_LOG_POS=307; #步骤5 中 Position 名称
mysql> start slave;
复制代码
3)查看状态

mysql> show slave status \G;

信息展示如下

#表示已同步

4)若 Slave_SQL_Running: no 请重复执行以下内容,直至yes:
命令:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

问题总结

一、主从mysql都要设置默认建表时“字符集”,“排序格式”,否则在插入数据时,会因编码格式不相同报错
修改方法:在my.cnf加入 [mysqld] character_set_server = utf8

通过客户端Navicat设置
1、 针对整个数据库设置

2、针对单表设置

Linux操作设置
查看字符集

  1. mysql> show variables like ‘character%’;

  2. mysql> show variables like ‘character_set_%’;

设置数据库字符集

  1. mysql> alter database test default character set = utf8;

  2. mysql> create database mydb character set utf8;

7
修改单个表的字符集

  1. mysql> alter table test1 default character set = utf8;

  2. mysql> alter table test2 convert to character set utf8;

二、sql能正确执行,但不能通过sql插入数据报错,
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and…,
需要在my.cnf 文件中 [mysqld] 加入以下配置

sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值