Linux 安装MySQL

通过Linux命令下载:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-对应版本,位数.tar.gz

#修改为自己需要版本
wget https://dev.mysql.com/get/Downloads/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
推荐命令下载 如果使用命令下载可以跳过第二步的第一步

 

二、上传MySQL压缩包到Linux并解压
1、上传到/usr/local目录
2、解压
tar -xvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
3、修改文件名
mv mysql-5.7.38-linux-glibc2.12-x86_64/ mysql
4、删除压缩包
也可留着安装成功后删

rm -f mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz

三、创建MySQL用户组、组名
# 创建MySQL用户组
groupadd mysql
# 添加MySQL用户并添加到MySQL用户组
useradd -r -g mysql mysql

四、创建数据目录并开启权限
1、在/usr/local/mysql目录下创建data文件夹
mkdir data

2、开启权限
chown -R mysql:mysql /usr/local/mysql/

五、配置my.cnf文件
1、编辑my.cnf
vim /etc/my.cnf
2、修改内容,原来的直接删除把下面复制进去
复制的时候看清安装目录和数据存放目录是否和你的一致

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
六、初始化MySQL
执行命令MySQL目标下bin目录下任选一个都行

1、执行命令 /usr/local/mysql目录下
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2、执行命令 /usr/local/mysql/bin 目录下
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --initialize
命令说明:

–defaults-file:默认配置文件地址
–datadir:是刚刚创建的data数据目录(不要闭着眼复制!你的目录可能跟我不一样!)
–basedir:是MySQL安装目录(你的目录名字可能跟我不一样,我的是mysql,注意注意!!!)
–user:刚刚创建的mysql用户

红款中的密码一会登录(./mysql -u root -p )的时候要用到

如何初始化报错如下所示

 

解决方案:

yum -y install numactl


3、将权限改回保留data
权限不改也行

chown -R root .
chown -R mysql data/

七、启动MySQL修改初始密码、授权远程连接
1、启动服务
/usr/local/mysql/support-files/mysql.server start

2、修改初始密码
# 切换目录
cd /usr/local/mysql/bin
# 登录命令
./mysql -u root -p
#修改密码
set password for root@localhost=password('我的密码');
#刷新权限
FLUSH PRIVILEGES;
SET PASSWORD = PASSWORD('密码'); 可以不用执行,当时为测试设置了个简单的

执行下面命令也可以设置密码:二选其一

# 设置密码
SET PASSWORD = PASSWORD('ok');
# 设置用户的访问密码用不过期
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
#刷新权限
FLUSH PRIVILEGES;


3、授权远程连接
1、在登录MySQL的状态授权
如果navicate连接报1130等就是没有授权远程连接
# 访问mysql库
use mysql
# 修改root用户能在任何host访问(授权远程连接)
update user set host = '%' where user = 'root';
# 刷新
FLUSH PRIVILEGES;

2、退出mysql


这里就可以用连接工具测试链接了
八、开启自启
1、依次执行下面命令进行软连接
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

service mysql restart


2、赋予权限、添加服务、显示服务列表
#赋予权限
chmod +x /etc/init.d/mysql

#添加服务
chkconfig --add mysql

#显示服务列表
chkconfig --list

3、开启失败
如上图所示,如果是2,3,4,5 都是开启的话则成功。
如果不是,可运行以下命令开启:

chkconfig --level 2345 mysql on
4、重启服务器
reboot
5、查看MySQL进程是否启动
ps -aux | grep mysql

九、Navicat 连接
连接时出现 2002错误代码,可能是防火墙没有开放3306端口。

也可以将防火墙关闭,不建议这样

# 开启端口3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看已经开放的端口
firewall-cmd --list-ports

 


十、防火墙命令
1.查看防火墙状态
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start
若遇到无法开启
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service

2.查看对外开放的端口状态
查询已开放的端口 netstat -ntulp | grep 端口号:可以具体查看某一个端口号
查询指定端口是否已开 firewall-cmd --query-port=666/tcp
提示 yes,表示开启;no表示未开启。

3.对外开发端口
查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp
添加指定需要开放的端口:firewall-cmd --add-port=123/tcp --permanent
重载入添加的端口:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=123/tcp
移除指定端口:firewall-cmd --permanent --remove-port=123/tcp
————————————————

mysql8.4主从复制

mysql8.4主从复制
实现MySQL主从复制需要进行的配置
具体实现过程:
一、准备工作
二、主数据库master修改:
二、从数据库slave修改:
三、验证:
实现MySQL主从复制需要进行的配置
主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号

从服务器:
配置唯一的server-id
使用master分配的用户账号读取master二进制日志
启用slave服务

具体实现过程:
一、准备工作
1.主从数据库版本最好一致
这里数据库版本都是8.4
2.主从数据库内数据保持一致
主数据库:172.10.10.46
从数据库:172.10.10…47

二、主数据库master修改:
1.修改mysql配置并重启
(配置server id和开启二进制日志)
找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下两行:

server-id = 1
log-bin = /apps/logs/mysql/binlog/3306/mysql-bin
1
2
service mysql.server restart
1
2.创建用于同步的用户账号

mysql -uroot -p
CREATE USER 'repl'@'172.10.10.47' IDENTIFIED BY 'oracle';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.10.10.47';
flush privileges;

3.查看master状态,记录二进制文件名(mysql-bin.000002)和位置(1987 )

mysql> show binary log status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 | 158 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)


还可以用到的其他相关参数:
谨慎使用
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema

只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game

二、从数据库slave修改:
1.修改mysql配置并重启服务
同样找到my.cnf配置文件,添加server-id

[mysqld]
server-id=2 #设置server-id,必须唯一
1
2
service mysql.server restart
1
2.登录到mysql执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

mysql -uroot -p
1
change replication source to
source_host='172.10.10.46',
source_user='repl',
source_password='oracle',
source_port=3306,
source_log_file='mysql-bin.000006',
source_log_pos=158;

3.启动slave同步进程:
mysql>start replica;

4.查看slave状态:

show replica status \G
1
Last_IO_Error: Error connecting to source 'repl@172.10.10.46:3306'. This was attempt 4/10, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
1
5.排错
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。
但是这里报错。

网上得到的解决方式有2个:

方案一:修改master库的密码加密方式
mysql> ALTER USER ‘repl’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘oracle’;
ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded
但是报错,这里没往下继续研究了,直接换第2种方式。

方案二:设置从库的change master 时加get_master_public_key=1参数
之前准备配置前,查询资料,看到过有人特意设置过get_master_public_key这个参数,加上这个参数再次配置:

1.从库执行 stop replica;

2.清除从库配置:reset replica all;

3.重新配置主库信息

change replication source to
source_host=‘172.10.10.46’,
source_user=‘repl’,
source_password=‘oracle’,
source_port=3306,
source_log_file=‘mysql-bin.000006’,
source_log_pos=158,
get_source_public_key=1;

4.开始复制主库 start replica;

5.查询从库状态:show replica status \G

启动正常了,Slave_IO_Running=YES,Slavel_SQL_Running=YES
这应该才是mysql8.0配置从库的这最优方式。

三、验证:
1.正常同步
主库创建一个表,从库可以查看到。
CREATE TABLE test1(a nvarchar(10) );
2.从库停止salve进程后,主库创建表,无法同步。从库启动salve进程后之前创建的表会自动同步。

从库停止salve进程:
root@localhost[15:04:24][(none)]_Master>stop replica;
Query OK, 0 rows affected (0.00 sec)

主库创建表:
CREATE TABLE test1(a nvarchar(10) );

从库开启salve进程:
root@localhost[15:07:55][(none)]_Master>start replica;
Query OK, 0 rows affected (0.00 sec)
————————————————

 

posted @ 2025-02-20 14:35  hanease  阅读(243)  评论(0)    收藏  举报