Ubuntu 18.04 安装和配置Mysql

1. 安装

提示:以下操作均在root权限下进行。

# 查看有没有安装MySQL:

dpkg -l | grep mysql

# 安装MySQL:

apt install mysql-server

 

安装完成之后可以使用如下命令来检查是否安装成功:

netstat -tap | grep mysql

 

通过上述命令检查之后,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。

 

2. 配置root和远程访问

登录mysql数据库可以通过如下命令:

mysql -u root -p

 

-u 表示选择登陆的用户名, -p 表示登陆的用户密码,现在是mysql数据库是没有密码的,Enter password:处直接回车,就能够进入mysql数据库。

然后通过 show databases; 就可以查看当前的所有数据库

 

接下来,为了确保数据库的安全性和正常运转,对数据库进行初始化操作。这个初始化操作涉及下面5个步骤。

(1)安装验证密码插件。

(2)设置root管理员在数据库中的专有密码。

(3)随后删除匿名账户,并使用root管理员从远程登录数据库,以确保数据库上运行的业务的安全性。

(4)删除默认的测试数据库,取消测试数据库的一系列访问权限。

(5)刷新授权列表,让初始化的设定立即生效。

对于上述数据库初始化的操作步骤,在下面的输出信息旁边我做了简单注释。

root@ubuntu-virtual-machine:~# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords

and improve security. It checks the strength of password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD plugin?    # 要安装验证密码插件吗?

Press y|Y for Yes, any other key for No: N    # 这里我选择N

Please set the password for root here.

New password:   # 输入要为root管理员设置的数据库密码

Re-enter new password:   # 再次输入密码



By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y     # 删除匿名账户

Success.



Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N    # 禁止root管理员从远程登录,这里我没有禁止

... skipping.

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.



Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y   # 删除test数据库并取消对它的访问权限

- Dropping test database...

Success.

- Removing privileges on test database...

Success.

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y   # 刷新授权表,让初始化后的设定立即生效

Success.

All done!

 

检查mysql服务状态:

systemctl status mysql

 

 

再次用mysql -u root -p命令,Enter password:处输入刚设置的密码,回车,就能够进入mysql数据库。

使用 use mysql; 命令打开mysql命名的数据库,显示当前数据库的表:show tables; 查询user表里的数据:select * from user;(user表里是mysql数据库的所有账户信息)

现在配置mysql允许远程访问,

首先编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件:

# vim /etc/mysql/mysql.conf.d/mysqld.cnf

注释掉bind-address          = 127.0.0.1

保存退出,然后进入mysql数据库,执行授权命令:

mysql -u root -p

mysql> grant all on *.* to root@'%' identified by '你的密码' with grant option;

mysql> flush privileges;    # 刷新权限

mysql> exit

然后执行exit命令退出mysql服务,再执行如下命令重启mysql:

systemctl restart mysql

 

 

 

3. 配置字符集

MySQL 需要支持 emoji 表情符号版本需要大于5.5.3,且字符集需要设置为utf8mb4 字符集。

utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以能支持更多的字符集。

将Mysql的编码从utf8转换成utf8mb4。

需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错

停止MySQL Server服务

修改 my.cnf

[client]

 default-character-set = utf8mb4

 

[mysql]

 default-character-set = utf8mb4

 

[mysqld]

 character-set-client-handshake = FALSE

 character-set-server = utf8mb4

 collation-server = utf8mb4_unicode_ci

 init_connect='SET NAMES utf8mb4'

 

 

重启 MySQL Server、检查字符集。

service mysql restart

 

 

 

查看服务器字符集设置

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';

 

+--------------------------+--------------------+

| Variable_name      | Value       |

+--------------------------+--------------------+

| character_set_client   | utf8mb4      |

| character_set_connection | utf8mb4      |

| character_set_database  | utf8mb4      |

| character_set_filesystem | binary       |

| character_set_results  | utf8mb4      |

| character_set_server   | utf8mb4      |

| character_set_system   | utf8        |

| collation_connection   | utf8mb4_unicode_ci |

| collation_database    | utf8mb4_unicode_ci |

| collation_server     | utf8mb4_unicode_ci |

+--------------------------+--------------------+

 

查看数据库字符集

use information_schema;

mysql> select * from SCHEMATA where SCHEMA_NAME='数据库名字';

 

+--------------+-------------+----------------------------+------------------------+----------+

| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |

+--------------+-------------+----------------------------+------------------------+----------+

| def     | ttlsa   | utf8mb4          | utf8mb4_unicode_ci   | NULL   |

+--------------+-------------+----------------------------+------------------------+----------+

 

 

查看表字符集

mysql> select TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION from information_schema.TABLES;
+--------------------+----------------------------------------------------+--------------------+

| TABLE_SCHEMA    | TABLE_NAME                     | TABLE_COLLATION  |

+--------------------+----------------------------------------------------+--------------------+

 

 

查看列字符集

mysql> select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME from COLUMNS;
+--------------------+----------------------------------------------------+-----------

| TABLE_SCHEMA    | TABLE_NAME       | COLUMN_NAME          | COLLATION_NAME   |

+--------------------+----------------------------------------------------+------------

 

 

转换字符集语句

use information_schema;

SELECT concat("ALTER DATABASE `",table_schema,"` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;") as _sql 

FROM `TABLES` where table_schema like "DB_NAME" group by table_schema;

SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") as _sql 

FROM `TABLES` where table_schema like "DB_NAME" group by table_schema, table_name;

SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type,"(",character_maximum_length,") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") as _sql 

FROM `COLUMNS` where table_schema like "DB_NAME" and data_type in ('varchar');

SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") as _sql 

FROM `COLUMNS` where table_schema like "DB_NAME" and data_type in ('text','tinytext','mediumtext','long

 

posted @ 2020-06-08 16:05  人不知所  阅读(314)  评论(0)    收藏  举报