mysql 安装,重设密码,主从库配置

环境:
系统 centos EL6
mysql : 5.7.18

最近要给存储在mysql中大量的数据,做个从库,防止机器挂了,数据丢失。

安装

root账户
1 添加 MySQL Yum Repository
下载 MySQL Yum Repository http://dev.mysql.com/downloads/repo/yum/

2 安装 MySQL Yum Repository

yum localinstall mysql57-community-release-el6-{version-number}.noarch.rpm

当然如果是centos的其他环境,安装方法类似,只是install 后面的名称有变化。

3 选择正式发布的版本

 yum repolist all | grep mysql

会列出所有的跟mysql相关的发布版本。包括是否是enable状态。并且可以更改其状态。
命令类似

yum-config-manager --disable mysql57-community

4 安装

yum install mysql-community-server

5 启动mysql服务

sudo service mysqld start

以上具体更详细内容见官网(参考文章中)。

安装完 mysql 后,还要进行些配置,如mysql 存储目录等,具体可见网上的资料。

2 重设密码

1 修改配置文件my.cnf, 在 [mysqld] 下面添加 skip-grant-tables

vim /etc/my.cnf
[mysqld]
skip-grant-tables

2 重启mysql

sudo service mysqld restart

or

sudo service mysqld  stop
sudo service mysqld start

3 无密码登录 mysql shell

mysql -u root

4 重设密码
网上很多的方法建议直接

update MySQL.user set password=PASSWORD('新密码') where User='root'; 

但是行不通,
也有人建议使用 alter user 的方法,但是执行的时候会报错。需要重新加载grant tables。
执行命令进行加载

flush privileges;

然后重新设置密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

有人说不同版本只见使用的方法不一样。
有的执行:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

or

update MySQL.user set password=PASSWORD('新密码') where User='root'; 

then

flush privileges;

去掉之前在my.cnf中添加的配置。重启 mysql。

可参考后面的文章

主从库配置

主库配置 master

针对机器 1 上的 mysql

1 修改 mysql 配置文件

在 [mysqld] 下面添加一下字段的配置;
server-id
log_bin
binlog_do_db
例如

server-id = 1
log_bin = /data/mysql/mysql-bin.log
binlog_do_db = data

其中,
server-id :必须是唯一的,如果有多个从库,每个从库之间这个值不一样,并且还有主库的不一样。
log_bin: 记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;作用:可以用来查看数据库的变更历史(具体的时间点所有的SQL操作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、MySQL的复制(主主数据库的复制、主从数据库的复制)(copied)。
binlog_do_db: 要复制数据的数据库名,如果有多个库,可以写多行。

2 创建与从库关联的帐号

重启msysql

sudo service mysqld restart

登录shell

mysql -uroot -p

创建用户

create user "slave"@"%" identified by "code";

授权:
数据库data中的所有表

grant all privileges on data.* to "slave"@"code";
flush privileges;

授权主库权限

grant  replication slave on data.* to "salve"@"%";

查看主库状态

show master status;

output like

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 | newdatabase  |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

后面配置从库中会用到此数据。

flush privileges;

如果需要将主库中的数据导出

mysqldump -u root -p --opt data > /path/to/data.sql

从库配置 slave

1 创建库以及导入数据

登录mysql shell, 创建要同步的的数据库,库名与主库master同步库名相同

create database data;

如果需要导入主库导出的数据

mysql -uroot -p data < /path/to/data.sql

2 配置从库

添加一下配置

server-id=29

relay-log = /data/mysql/mysql-relay-bin.log
log_bin = /data/mysql/mysql-bin.log
binlog_do_db = data

重启 从库 mysql

service mysql restart

进入msyql shell 进行主库复制设置

CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave', MASTER_PASSWORD='code', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=  107;

MASTER_HOST 为主库所在机器的 ip
MASTER_LOG_FILE, MASTER_LOG_POS 的值来自前面 show master status 的输出

激活 从库slave

start slave;

如果之前已经启动了slave,先关闭,然后启动。

stop slave

3 查看是否正常同步

在从库中执行

show slave status \G;

如果出现

Slave_IO_Running: Yes
Slave_SQL_Running: Yes 

以上两项都是Yes,表示正常同步。

错误

从库中执行

show slave status \G;

出现的结果是

Slave_IO_Running: Yes
Slave_SQL_Running: NO
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '5619166' for key 'PRIMARY'' on query. 

问题的很明显;
解决步骤
1 从库中执行

stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
START SLAVE;

然后从新查看状态

show slave status;

或者添加跳过此类错误
在my.cnf 的 [mysqld]中添加

slave-skip-errors = 1062

然后

service mysqld restart

登录 mysql shell

stop slave;
start slave;
show slave status \G;

可见参考文章

参考文章

Installing MySQL on Linux Using the MySQL Yum Repository
https://dev.mysql.com/doc/mysql-repo-excerpt/5.6/en/linux-installation-yum-repo.html

How To Reset Your MySQL or MariaDB Root Password
https://www.digitalocean.com/community/tutorials/how-to-reset-your-mysql-or-mariadb-root-password

How To Set Up Master Slave Replication in MySQL
https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

MySQL replication stop at Last Errno 1062
https://www.techiecorner.com/2572/mysql-replication-stop-at-error-no-1062/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制是一项非常常用的高可用性和扩展性解决方案,它可以将一个MySQL服务器(主节点)上的更改同步到一个或多个MySQL服务器(从节点)上,从而实现数据的备份、负载均衡、故障转移等功能。下面是安装配置MySQL主从复制的步骤: 1.安装MySQL 在主节点和从节点上都需要安装MySQL,可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install mysql-server ``` 2.配置主节点 在主节点上,需要对MySQL进行以下配置: - 编辑`/etc/mysql/mysql.conf.d/mysqld.cnf`文件,将`bind-address`改为主节点的IP地址; - 在`[mysqld]`下新增`log-bin=mysql-bin`,表示启用二进制日志; - 在`[mysqld]`下新增`server-id=1`,表示设置主节点的ID为1; - 重启MySQL服务:`sudo service mysql restart`。 3.配置从节点 在从节点上,需要对MySQL进行以下配置: - 编辑`/etc/mysql/mysql.conf.d/mysqld.cnf`文件,将`bind-address`改为从节点的IP地址; - 在`[mysqld]`下新增`server-id=2`,表示设置从节点的ID为2; - 重启MySQL服务:`sudo service mysql restart`。 4.在主节点上创建复制账户 在主节点上,创建一个可以进行复制操作的账户,可以使用以下命令: ``` CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 其中,`repl`为账户名,`password`为密码。 5.获取主节点状态 在主节点上,需要获取当前的二进制日志文件名和偏移量,可以使用以下命令: ``` SHOW MASTER STATUS; ``` 记录下`File`和`Position`的值,后面会用到。 6.配置从节点复制信息 在从节点上,需要对复制进行配置,可以使用以下命令: ``` CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', -- 主节点上的File值 MASTER_LOG_POS=1234; -- 主节点上的Position值 ``` 其中,`master_ip`为主节点的IP地址,`repl`和`password`为上一步中创建的账户和密码,`mysql-bin.000001`和`1234`为上一步中获取到的File和Position值。 7.启动从节点复制 在从节点上,使用以下命令启动复制: ``` START SLAVE; ``` 可以使用以下命令检查复制状态: ``` SHOW SLAVE STATUS\G ``` 如果`Slave_IO_Running`和`Slave_SQL_Running`都为`Yes`,则说明复制已经成功启动。 8.测试 在主节点上进行数据变更,可以使用以下命令: ``` USE test; CREATE TABLE t1 (id INT PRIMARY KEY); INSERT INTO t1 VALUES (1), (2), (3); ``` 在从节点上检查是否同步成功: ``` USE test; SELECT * FROM t1; ``` 如果能够看到刚才插入的数据,则说明主从复制已经成功配置。 注意,以上步骤只是一个基本的示例,实际应用中可能还需要进行其他的配置和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值