Linux安装:Mysql数据库

1、安装

1.1、yum安装Mariadb

执行安装

yum install -y mariadb*

启动

systemctl start mariadb.service

开机启动

systemctl enable mariadb.service

测试

# mysql
>show databases;
>exit

执行安全配置,按提示操作

mysql_secure_installation

如果有需要,移动数据目录

mkdir /DATA/mysqldata
systemctl stop mariadb
cp -r /var/lib/mysql/* /DATA/mysqldata/
vi /etc/my.cnf

修改相关的路径

在[mysqld]下添加:
把原来的socket=/DATA/mysqldata/mysql.sock,前边加#注释掉,添加socket=/data/mysql.sock(以防有问题再改回来)。
新增
datadir =/data/mysqldata
[client]
socket=/data/mysql.sock

# 修改文件所属
chown -R mysql:mysql /DATA/mysqldata

授权selinux

chcon -R -t mysqld_db_t /DATA/mysqldata
systemctl start mariadb

 

1.2、docker安装Mysql5.7

1.2.1、获取镜像

去docker hub官方网站获取mysql镜像:https://hub.docker.com/_/mysql/

docker pull mysql:5.7

# 获取5.7的最后一个版本,这是官方的mysql版本,装载Ubuntu下
# 也可以获取其他版本的mysql 比如centos/mysql-57-centos7,安装的路径和配置略有不同

1.2.2、通过镜像创建容器并运行

创建mysql目录

cd /opt/mysql
mkdir data

运行mysql5.7基础容器

docker run -p 3306:3306 --name mysql -h mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

拷贝出配置文件

docker cp mysql:/etc/mysql/conf.d /opt/mysql/conf

关闭并删除基础容器

docker stop mysql
docker rm mysql

创建命令

vi docker_run.sh

docker run -p 3306:3306 --name mysql -h mysql --restart=always -v /etc/localtime:/etc/localtime:ro -v $PWD/conf:/etc/mysql/conf.d -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。

-h mysql 设置容器主机名

-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf 挂载到容器的 /etc/mysql/conf.d。

-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

 

1.2.3、开启远程登录权限

docker exec -it mysql /bin/bash
#进入容器

mysql -uroot -p
#进入mysql

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
#授权

mysql> flush privileges;
#刷新权限

 

2、配置参数

具体参数需要根据每台服务器情况调整

vi /etc/my.cnf

[mysqld]
character-set-server=utf8mb4
lower_case_table_names=1
back_log = 500
max_connections = 500
max_connect_errors = 60000
innodb_buffer_pool_size = 5G
innodb_log_file_size = 4G
innodb_log_buffer_size = 10M
innodb_flush_log_at_trx_commit = 2
table_open_cache = 6000

#慢日志
slow_query_log =1
long_query_time=3
slow_query_log_file=/opt/mysqldata/mysql-slow.log


[client]
default-character-set=utf8mb4

 

参数说明

参数 说明
back_log mysql在瞬时能够接收的链接数。高并发时需要配置,默认80
max_connections 最大连接数,视服务器性能,一般不超过2000,最高不超过4000
max_connect_errors 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST
innodb_buffer_pool_size 物理内存的70%-80%左右,不宜过大
innodb_flush_log_at_trx_commit 1:性能最慢。每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时,但不会丢失任何一个事务。
2:性能中等。不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。
0:性能最快。但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据
table_open_cache 表的缓存:2*max_connections-5*max_connections,但是不能大于操作系统文件描述符限制。当某一连接访问一个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表已加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进行查询。查看:
> show global status like 'open%_tables';
> Open_tables正在打开的表数量。
> Opened_tables曾经打开过的表数量。
> 如果Open_tables的值已经接近table_open_cache的值,且Opened_tables还在不断变大,则需要加大table_open_cache
innodb_log_file_size 这个选项是设置 redo 日志(重做日志)的大小。redo 日志 是用来确保写入的数据能够快速地写入,并且持久化,还可以用于崩溃恢复。配置大可以提高性能,当时会降低崩溃恢复的速度。 MySQL 5.6,可以设置为4G以上
innodb_log_buffer_size 这个设置项用来设置缓存还没有提交的事务的缓冲区的大小。默认值(1MB) 一般是够用的,但一旦事务之中带有大 blob/text 字段,这个缓冲区会被很快填满,并引起额外的 I/O 负载。看看 innodb_log_waits 这个状态变量的值,如果不是 0 的话,需要增加 innodb_log_buffer_size

 

3、常见错误

3.1、ERROR 2003无法连接

ip监听错误,修改监听IP

gedit /etc/mysql.my.cnf

找到bind-address =127.0.0.1

修改为bind-address =0.0.0.0

重启

/etc/init.d/ mysql restart

在这种情况下如果再尝试远程连接,则会报出ERROR 1130 (HY000): Host '211.87..'is not allowed to connect to this MySQL server提示信息,不能远程连接数据库。

在MySQL host上按如下命令操作

mysql -u root -ppassword //进入mysql控制台

mysql>use mysql;

mysql>update user set host = '%' where user = 'root'; //这个命令执行错误时可略过

mysql>flush privileges;

mysql>select host, user from user; //检查‘%’ 是否插入到数据库中

mysql>quit