Nhân bản user trong mysql
Mysql
44
White

manhdung viết ngày 27/05/2015

Vấn đề

Đôi lúc trong việc quản trị database, tôi phải chuyển user database từ nơi này sang nơi khác. Nhưng phần thông tin user mà web application sử dụng để truy cập các database thì nằm hết trong system table mysql.user Không phải lúc nào chúng ta cũng có thể bê nguyên xi toàn bộ database sang được. Vài lý do mà tôi không làm thế như: hệ cơ sở dữ liệu khác nhau, cái cũ dùng mysql, cái sau lại dùng mariadb hoặc sự sai biệt về phiên bản của cùng một hệ cơ sở dữ liệu. Nói chung là nếu có những sai biệt về cấu trúc của system table thì không nên bê nguyên sang.

Trong khuôn khổ bài viết này tôi không viết toàn bộ quá trình di chuyển database. Tôi sẽ chỉ giới hạn trong việc giải quyết vấn đề làm thế nào để di chuyển toàn bộ thông tin user của web application dùng sang cơ sở dữ liệu mới.

Cách giải quyết

Tôi thường dùng hai cách:

  • Cách 1: Thủ công nhất. Khi chưa biết đến cách hai, tôi đã phải dùng cách này. Nhưng cũng may hồi đó số lượng user phải nhân bản là còn ít :D

Ví dụ: Tôi cần clone user 'test'@'1.2.3.4'
Trên database cũ, tôi thực hiện

show grants for 'test'@'1.2.3.4'\G
*************************** 1. row ***************************
Grants for test@1.2.3.4: GRANT USAGE ON *.* TO 'test'@'1.2.3.4' IDENTIFIED BY PASSWORD '<hash passwd>'
*************************** 2. row ***************************
Grants for test@1.2.3.4: GRANT ALL PRIVILEGES ON `test_db`.* TO 'test'@'1.2.3.4'

Tôi sẽ lấy được hai thông tin cần là:
hash password và grant của user 'test'@'1.2.3.4'

Trên database mới, tôi thực hiện

create user 'test'@'1.2.3.4' identified by password '<hash passwd>' 
grant all privileges on `test_db`.* to 'test'@'1.2.3.4';

Create user trong mysql có hai biến thể:

create user 'username'@'ip' identified by 'plain passwd';
create user 'username'@'ip' identified by password 'hash passwd';

Biến thể thứ hai rất hữu ích trong trường hợp này. Tôi có thể nhân bản user mà không cần biết password của user đó thực sự là gì.

  • Cách 2: Hoàn toàn tự động. Tôi sử dụng một tool trong bộ percona-toolkit Trên database cũ, tôi chỉ thực hiện:
pt-show-grants --host localhost --user root --password '<passwd>' > mysql_cloned_users.sql

Toàn bộ các user có trong mysql.user sẽ được đẩy ra thành các statement tương tự như cách 1. Việc còn lại chỉ là import script sql này trên database mới

mysql -u root -p < mysql_cloned_users.sql
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

manhdung

44 bài viết.
263 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
76 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết 3 năm trước
76 11
White
48 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết gần 2 năm trước
48 4
White
41 12
Trong phần 1, tôi đã giới thiệu về sơ lược rabbitmq, vai trò của rabbitmq trong hệ thống phân tán và hướng dẫn cài đặt. Trong phần này, tôi sẽ trìn...
manhdung viết 3 năm trước
41 12
Bài viết liên quan
White
20 0
Mysql innodb internal là một chủ đề khá sâu. Bản thân tôi cũng chưa bao quát hết. Bài viết này chỉ cung cấp một cái nhìn sơ lược. Để các bạn khôn...
manhdung viết 3 năm trước
20 0
White
25 2
(Ảnh) Tiêu đề chỉ là câu khách :v, thực ra là có một vài điểm về mysql explain mà chắc chưa nhiều bạn biết, tớ cũng hay quên nên note lại cho nhớ ...
LinhPT viết gần 3 năm trước
25 2
White
2 2
Đôi khi cài đặt MySQL trên Ubuntu hoặc trên các HĐH khác, trình cài đặt sẽ tự động set một mật khẩu ngẫu nhiên cho tài khoản root, nếu không để ý t...
Dang Viet Ha viết hơn 2 năm trước
2 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
263 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!