readysettech / readyset

Readyset is a MySQL and Postgres wire-compatible caching layer that sits in front of existing databases to speed up queries and horizontally scale read throughput. Under the hood, ReadySet caches the results of cached select statements and incrementally updates these results over time as the underlying data changes.
https://readyset.io
Other
4.26k stars 117 forks source link

If password containts @ won't connect #1118

Open cosminbegu opened 6 months ago

cosminbegu commented 6 months ago

Describe the problem Hi, when using the following connection string: mysql://bigdata:BigD@ta@127.0.0.1:3306/bigdata the password includes the @ if that is the case it will fail to connect.

To Reproduce Use @ as part of the user password.

altmannmarcelo commented 5 months ago

Hi @cosminbegu

Thanks for your report. Can you please share the error log from readyset and also which version are you using?

We performed some upgrade of underlining mysql libraries we use. When running readyset on top of current main branch I can connect with users that have an @ in the password:

Readyset

readyset --upstream-db-url=mysql://readyset:p@assword@127.0.0.1:3308/test
2024-03-19T18:30:33.774243Z  INFO readyset: Starting ReadySet adapter options=Options { address: None, deployment: "readyset.db", database_type: None, deployment_mode: Standalone, standalone: false, embedded_readers: false, authority: Standalone, authority_address: ".", log_slow: false, allow_unauthenticated_connections: false, query_caching: Explicit, max_processing_minutes: 15, migration_task_interval: 20000, metrics_address: 0.0.0.0:6034, username: None, password: None, prometheus_metrics: true, noria_metrics: false, query_log_mode: Enabled, external_address: None, tracing: Options { log_path: None, log_rotation: Daily, log_format: Full, no_color: false, log_level: "info", tracing_host: None, tracing_sample_percent: Percent(0.01), statement_logging: false, statement_log_path: None }, psql_options: Options { readyset_identity_file: None, readyset_identity_file_password: None, postgres_authentication_method: ScramSha256 }, allow_unsupported_set: false, unsupported_set_mode: Error, views_polling_interval: 5, migration_request_timeout_ms: 1800000, controller_request_timeout_ms: 5000, query_max_failure_seconds: 9223372036854775, fallback_recovery_seconds: 0, non_blocking_reads: false, server_worker_options: WorkerOptions { durability: Permanent, persistence_threads: None, memory_limit: 0, memory_check_freq: 1, eviction_kind: LRU, no_partial: false, allow_full_materialization: false, enable_packet_filters: false, min_workers: 1, shards: 0, volume_id: None, enable_experimental_topk_support: false, enable_experimental_paginate_support: false, enable_experimental_mixed_comparisons: false, enable_experimental_straddled_joins: false, enable_experimental_post_lookup: false, storage_dir: None, db_dir: None, domain_replication_options: ReplicationOptions { reader_replicas: None, non_base_replicas: None }, replicator_config: UpstreamConfig { upstream_db_url: Some("mysql://readyset:p@assword@127.0.0.1:3308/test"), disable_upstream_ssl_verification: false, ssl_root_cert: None, disable_setup_ddl_replication: false, replication_server_id: None, replicator_restart_timeout: 1s, replication_tables: None, replication_tables_ignore: None, snapshot_report_interval_secs: 30, max_parallel_snapshot_tables: None, replication_pool_size: 50, ignore_ulimit_check: false, status_update_interval_secs: 10 }, worker_request_timeout_seconds: 1800, background_recovery_interval_seconds: 20, verbose_domain_metrics: false }, disable_telemetry: false, wait_for_failpoint: false, experimental_placeholder_inlining: false, no_upstream_connections: false, cleanup: false, controller_address: None, query_status_capacity: 100000, cache_ddl_address: None }
2024-03-19T18:30:33.775224Z  INFO readyset: version={release-version: unknown-release-version, commit_id: c79c063b501be11b529f23cac2ed4c559042583e, platform: aarch64-apple-darwin, rustc_version: rustc 1.75.0-nightly (fdaaaf9f9 2023-11-08), profile: debug, opt_level: 0}
2024-03-19T18:30:33.775732Z  INFO readyset: Listening for new connections listen_address=127.0.0.1:3307
2024-03-19T18:30:33.776309Z  INFO Connecting to RS server: readyset: options.authority_address=. options.deployment=readyset.db
2024-03-19T18:30:33.796795Z  INFO Connecting to RS server: readyset: ReadySetHandle created
2024-03-19T18:30:33.797106Z  INFO Connecting to RS server: readyset: Now capturing ctrl-c and SIGTERM events
2024-03-19T18:30:33.797821Z  INFO Connecting to RS server: readyset: PrometheusHandle created
2024-03-19T18:30:33.798102Z  INFO Connecting to RS server: readyset: Query logs are enabled. Spawning query logger
2024-03-19T18:30:33.798318Z  INFO Connecting to RS server: readyset: Will perform Blocking Reads
2024-03-19T18:30:33.798328Z  INFO Connecting to RS server: readyset: migration_style=Explicit
2024-03-19T18:30:33.799385Z  INFO Connecting to RS server: readyset: migration_mode=OutOfBand
2024-03-19T18:30:33.799413Z  INFO Connecting to RS server: readyset: Spawning HTTP request server task
2024-03-19T18:30:33.805094Z  INFO Connecting to RS server: readyset: Spawning migration handler task
2024-03-19T18:30:33.805168Z  INFO Connecting to RS server: readyset: Spawning explicit migrations task
2024-03-19T18:30:33.805483Z  INFO readyset_server::builder: Using 8 persistence threads
2024-03-19T18:30:33.806788Z  INFO Connecting to RS server: readyset: supported=false
2024-03-19T18:30:33.820127Z  INFO readyset_server::controller: won leader election, creating Leader
2024-03-19T18:30:33.820984Z  INFO readyset_server::controller::inner: received registration payload from worker worker_uri=http://127.0.0.1:6033/ reader_addr=127.0.0.1:4000
2024-03-19T18:30:33.821733Z  INFO readyset_server::worker: worker informed of new controller controller_uri=http://127.0.0.1:6033/
2024-03-19T18:30:33.822394Z  INFO readyset_server::worker: controller requested that this worker clears its existing domains
2024-03-19T18:30:33.822993Z  INFO readyset_server::controller::inner: now have 1 of 1 required workers
2024-03-19T18:30:33.823246Z  INFO plan_recovery: readyset_server::controller::state: Planning recovery
2024-03-19T18:30:33.824308Z  INFO readyset_server::controller::inner: Finished planning recovery with all domains placed
2024-03-19T18:30:34.095426Z  INFO taking database snapshot: replicators::noria_adapter: Starting snapshot
2024-03-19T18:30:34.258817Z  INFO taking database snapshot: replicators::mysql_connector::snapshot: Replication offset already exists for table, skipping snapshot table=`test`.`t2`
2024-03-19T18:30:34.258827Z  INFO taking database snapshot: replicators::mysql_connector::snapshot: Replication offset already exists for table, skipping snapshot table=`test`.`t1`
2024-03-19T18:30:34.260036Z  INFO taking database snapshot: replicators::noria_adapter: Snapshot finished
2024-03-19T18:30:34.323969Z  INFO replicators::mysql_connector::connector: Starting binlog replication next_position=binlog.000005:1003
2024-03-19T18:30:34.324177Z  INFO replicators::noria_adapter: MySQL connected
2024-03-19T18:30:34.324187Z  INFO replicators::noria_adapter: binlog_position=binlog.000005:1003
2024-03-19T18:30:34.823249Z  INFO readyset_server::worker: worker informed of new controller controller_uri=http://127.0.0.1:6033/

MySQL Client

marcelo ~ $ mysql -u readyset -p'p@assword' -h 127.1 -P3307 -e "SHOW READYSET STATUS"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------+-------------------------+
| Variable_name              | Value                   |
+----------------------------+-------------------------+
| Database Connection        | Connected               |
| Connection Count           | 1                       |
| Snapshot Status            | Completed               |
| Maximum Replication Offset | binlog.000005:1003      |
| Minimum Replication Offset | binlog.000005:1003      |
| Last started Controller    | 2024-03-19 18:30:33 UTC |
| Last completed snapshot    | 2024-03-19 18:30:34 UTC |
| Last started replication   | 2024-03-19 18:30:34 UTC |
+----------------------------+-------------------------+