MySQL 5 从安装到同步

发布时间 2023-03-28 19:50:05作者: 双面dd

安装部分

创建用户和组

由于采用直接初始化方式所以用户不会自动创建需要为mysql手动创建用户与组;

创建组

groupadd mongodbtest

创建用户

useradd mongodbtest -g mongodbtest

建立mysql文件夹与上传文件

建立mysql安装文件夹。使用根目录下的app文件夹

mkdir /app

上传并解压文件再重命名文件

修改my.cnf文件

备份系统原有的my.cnf文件

mv /etc/my.cnf /etc/my.cnf.bak

新建my.cnf文件内容为

[client]
socket=/usr/local/src/mysql/mysql/mysql.sock
[mysqld]
port=3306
lower_case_table_names=1
basedir=/app/mysql
datadir=/app/mysql/data
pid-file=/app/mysql/mysql.pid
socket=/app/mysql/mysql.sock
log_error=/app/mysql/error.log

修改文件夹权限

chown -R mongodbtest:mongodbtest /app/mysql/

初始化mysql

/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mongodbtest -- basedir=/app/mysql --datadir=/app/mysql/data

查看临时密码

cat /app/mysql/error.log |grep -i "password"

创建连接(可以不做)

ln -s /app/mysql/mysql.sock /tmp/mysql.sock
# 更改连接权限
chown -R  mongodbtest:mongodbtest /tmp/mysql.sock

启动服务

/app/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mongodbtest &

连接与修改数据库密码

/app/mysql/bin/mysql -uroot -p 

输入密码不会显示,输入刚才看到的临时密码

修改密码:

set password for 'root'@'localhost' = password('123456');

刷新权限:

flush privileges;

退出数据库:

quit;

修改数据库登录权限

打开mysql库

use mysql;

查看用户与登录限制

 select user,host from user

修改可登录用户的主机IP

update user set host='%' where user='root';
grant all privileges on *.* to root@'%';

刷新权限

flush privileges;

设置root用户任意主机名和IP登录时的密码

ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY
'123456';

刷新数据用户权限

flush privileges;

关闭数据库

/app/mysql/bin/mysqladmin -uroot -p shutdown

Enter password:输入密码(不显示)

出现问题

安装时不出现 sock文件。重新初始化即可。mysql中文件夹会自动创建不需要手动新建。

双主同步

注意

同步前一定要关闭数据库

关闭命令在bin目录下运行

./mysqladmin -uroot -p shutdown

输入密码即可关闭

例如

主:master 10.10.10.1 从:slave 10.10.10.2

这里只是称之为主从,实际搭建是双主。

主库

修改my.cnf文件

主:master

增加如下内容

relay-log=/app/mysql/data/relay-bin
relay-log-info-file=/app/mysql/data/relay-log-info
log-bin=/app/mysql/data/mysql-bin
server-id=101
binlog-do-db=test       #同步的库
binlog-ignore-db=mysql
replicate-do-db=test    #同步的库
replicate-ignore-db=mysql   #不同步的库
log-slave-updates
slave-skip-errors=all
skip-name-resolve
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1

其中replicate-do是要同步的库,binlog-do是要同步库的日志。

启动数据库

在mysql的bin目录下运行

./mysqld_safe --defaults-file=/etc/my.cnf --user=mongodbtest &

其中 file指向my.cnf文件 user是建立mysql的用户

连接数据库

/bin/mysql -uroot -p

输入密码

授权同步用户

grant replication slave,file on *.* to 'root'@'%';
flush privileges;

备份数据库

由于在同步前已经建立的数据库无法进行同步建表操作,所以需要进行一致性备份。

mysqldump -uroot -h10.10.10.1 --flush-logs --master-data=2 --routines --triggers
--events --lock-tables --databases test -p > test_date.sql

其中h为本机的ip地址 test为备份的库名 test_date.sql 为备份的文件

锁表

flush tables with read lock\G

查看master值

show master status\G

记录输出的内容

主要记录File和Position值

File: mysql-bin.000001

Position: 510

从库

编辑my.cnf文件

添加

relay-log=/app/mysql/data/relay-bin
relay-log-info-file=/app/mysql/data/relay-log-info
log-bin=/app/mysql/data/mysql-bin
server-id=102
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
skip-name-resolve
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=2

其中replicate-do是要同步的库,binlog-do是要同步库的日志。

启动数据库

/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mongodbtest &

连接数据库

/app/mysql/bin/mysqld -uroot -p 

输入密码(不显示)

授权

grant replication slave, file on *.* to 'root'@'%';
-- 刷新权限
flush privileges;

关闭二进制日志

 set sql_log_bin=OFF;

恢复数据库

mysql -uroot -p -S /app/mysql/mysql.sock
test<test_date.sql

test是要恢复的表名称 test_date.sql是要恢复的文件

锁表

flush tables with read lock\G

记录master值

show master status\G

主要记录File和Position的参数值

File: mysql-bin.000001

Position: 510

开启二进制日志

set sql_log_bin=ON;

同步配置

主:master

连接数据库输入

-- 输入同步信息
change master to
-- 从slave的ip
master_host='10.10.10.2',
-- 从slave的mysql端口
master_port=3306,
-- 从slave的同步用户
master_user='root',
-- 从slave同步用户的密码
master_password='123456',
之前记录的File和Position的参数值
master_log_file='mysql-bin.000004',
master_log_pos=534;

执行后输出 Query OK, 0 rows affected (0.01 sec) 便为成功

开启同步

start slave;

从:slave

进行相同操作

change master to
master_host='10.10.10.1',
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='mysql-bin.000004',
master_log_pos=542;

执行后输出 Query OK, 0 rows affected (0.01 sec) 便为成功

开启同步

 start slave;

查看是否同步

show processlist\G;

查看server_id是否和配置文件中的一致

show variables like 'server_id';

开始同步

两个库全部执行

-- 取消锁表
unlock tables;
show slave status\G;

查看 Slave_IO和Slave_SQL是否为yes[^错误]

同步测试

建立同步的表

CREATE TABLE IF NOT EXISTS `A`( `id` INT UNSIGNED AUTO_INCREMENT
PRIMARY KEY, `name` VARCHAR(100) NOT NULL);

插入数据

INSERT INTO A(name) values('test1');

查询数据

SELECT * FROM A;

查询库

show databases;

打开库

use test;

test为库名

查询表

show tables;

查询字段

select * from table_name;

关闭防火墙命令: systemctl stop firewalld.service

启动防火墙: systemctl start firewalld.service

行开机禁用防火墙自启命令 : systemctl disable firewalld.service

防火墙随系统开启启动 : systemctl enable firewalld.service